The order of cout messages is not as expected

前端 未结 2 885
闹比i
闹比i 2021-01-13 06:52

I am confused with the output of below code when I execute it.

Code:

int add(int a, int b)
{
    cout<<\"inside int add function\"<

        
相关标签:
2条回答
  • 2021-01-13 07:08

    This line in you code:

    cout<<add(10.0f,20.0f)<<endl<<add(20,50);
    

    will be translated by the compiler into:

    operator<<(operator<<(operator<<(cout,add(10.0f,20.0f)),endl),add(20,50));
    

    As the order of evaluation of function parameters is not mandated by the standard, it just happens that add(20,50) is evaluated before operator<<(operator<<(cout,add(10.0f,20.0f)),endl).

    0 讨论(0)
  • 2021-01-13 07:11

    the line cout<<add(10.0f,20.0f)<<endl<<add(20,50); is expected to print your output:

    inside int add function
    inside float add function
    30
    70
    

    Thats because to print to cout firstly calls add(10.0f , 20.0f) and stores the output to a internal variable, then calls add(10, 20) and stores the output to another internal variable, and finally it prints the returned values. Something like this:

    float a = add(10.0f, 20.0f);
    int b = add(10, 20);
    cout << a << endl << b;
    

    In this case, if you want to print as you wish, try to print first one function, and then the other:

    cout << add(10.0f, 20.0f) << endl;
    cout << add(10, 20);
    
    0 讨论(0)
提交回复
热议问题