奇怪的cout输出(代码块代码块-16.01mingw-setup.exe)

时间:2016-09-08 12:15:52

标签: c++

当我运行这个程序时,我得到了奇怪的输出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;
}

2 个答案:

答案 0 :(得分:2)

您案件中的评估顺序是从右到左。

请注意,无法保证从左到右的评估。

所以订单是:

  1. f2(*py)

  2. *px

  3. f1(*px)

  4. <<

  5. 只有{{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

你感到幸运吗?