执行时,我对下面代码的输出感到困惑。
代码:
int add(int a, int b)
{
cout<<"inside int add function"<<endl;
return a+b;
}
float add(float a, float b)
{
cout<<"inside float add function"<<endl;
return a+b;
}
int main()
{
cout<<add(10.0f,20.0f)<<endl<<add(20,50);
return 0;
}
输出:
inside int add function
inside float add function
30
70
我不明白cout消息的顺序是在控制台中打印出来的。但我期望上面的程序输出如下
inside float add function
30
inside int add function
70
有人可以解释一下上述行为。
答案 0 :(得分:7)
您的代码中的这一行:
cout<<add(10.0f,20.0f)<<endl<<add(20,50);
将由编译器翻译成:
operator<<(operator<<(operator<<(cout,add(10.0f,20.0f)),endl),add(20,50));
由于标准没有规定功能参数的评估顺序,因此add(20,50)
之前就会operator<<(operator<<(cout,add(10.0f,20.0f)),endl)
进行评估。
答案 1 :(得分:1)
预计行cout<<add(10.0f,20.0f)<<endl<<add(20,50);
会打印您的输出:
inside int add function
inside float add function
30
70
这是因为打印到cout
首先调用add(10.0f , 20.0f)
并将输出存储到内部变量,然后调用add(10, 20)
并将输出存储到另一个内部变量,最后打印出来返回值。像这样:
float a = add(10.0f, 20.0f);
int b = add(10, 20);
cout << a << endl << b;
在这种情况下,如果您想要打印,请尝试打印第一个功能,然后打印另一个功能:
cout << add(10.0f, 20.0f) << endl;
cout << add(10, 20);