cout' s<<操作员在操作员优先级方面的工作?

时间:2012-01-02 19:12:40

标签: c++ operators cout operator-precedence

  

可能重复:
  Unexpected order of evaluation (compiler bug?)

我无法预测此程序的输出:

#include<iostream>
using namespace std;

int *p(int *a)
{
    (*a)++;
    return a;
}
int main()
{
    int i=0;

    cout<<i++<<" "<<(*p(&i))++<<" "<<i++<<" "<<i<<endl;
    return 0;
}

在vs2008中编译时,会输出3 2 0 4。任何人都可以解释为什么它不是0 2 3 4

注意:如果没有p的函数调用,它会很有效。

提前致谢!

2 个答案:

答案 0 :(得分:4)

未定义的行为。可以做任何事情。

请参阅this answer以获得更好的解释。

答案 1 :(得分:0)

这一点不是cout的优先级,而是++运算符 这种操作符的副作用可以在两个序列点之间的任何时间发生,这意味着状态网中的任何位置。正如@ oli-charlesworth所说,确切的顺序是未定义的 cout的优先级是从左到右,所以最左边的是首先打印的。但每个数字的值取决于++的行为。