当我运行这个程序时,我得到了奇怪的输出1132.有人可以解释我为什么是1132?
//main.cpp
#include <iostream>
using namespace std;
int f1(int &a){return a++;}
int f2(int &a){return ++a;}
int main(){
int x, y;
int *px, *py;
x = 1;
y = 2;
px = &x;
py = &y;
cout << f1(*px) << *px << f2(*py) << *py << "\n";
return 0;
}
答案 0 :(得分:2)
您案件中的评估顺序是从右到左。
请注意,无法保证从左到右的评估。
所以订单是:
f2(*py)
*px
f1(*px)
<<
只有{{1}}运算符运行(并按预期从左到右进行评估)
答案 1 :(得分:1)
在这一行:
cout << f1(*px) << *px << f2(*py) << *py << "\n";
编译器可以按任意顺序自由评估每个表达式(即使运算符&lt;&lt;的执行顺序是从左到右)。
表达式是:
f1(*px)
f2(*py)
*px
*py
评估顺序可以是npr(4,4)排列中的任何一个。
npr(4,4)= 4! /(4-4)! = 24
你感到幸运吗?