下面的程序输出10.我希望它首先打印0(函数f的else分支)然后打印1.为什么订单被颠倒?
#include <iostream>
using namespace std;
int f(bool& b){
if (b==true){
return 1;
} else {
b=true;
return 0;
}
}
int main () {
bool b=false;
cout<<unitbuf<<f(b)<<unitbuf<<f(b);
return 0;
}
输出
10
答案 0 :(得分:5)
未指定评估函数参数的顺序。所以,你在左边有这个论点:
(cout << unitbuf << f(b) << unitbuf)
这一个在右边:
f(b)
两者都传递给operator<<
(最后一个)。任何一个都可以先评估。如果首先评估左边的那个,那么左边的f(b)
的调用将首先发生,然后返回0.然后右边的那个将被调用并返回1,导致输出{{ 1}}。如果首先评估右边的那个,那么 it 将返回0,然后将调用左边的那个,返回1,导致01
的反转输出。 / p>