我无法预测此程序的输出:
#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
的函数调用,它会很有效。
提前致谢!
答案 0 :(得分:4)
未定义的行为。可以做任何事情。
请参阅this answer以获得更好的解释。
答案 1 :(得分:0)
这一点不是cout的优先级,而是++运算符 这种操作符的副作用可以在两个序列点之间的任何时间发生,这意味着状态网中的任何位置。正如@ oli-charlesworth所说,确切的顺序是未定义的 cout的优先级是从左到右,所以最左边的是首先打印的。但每个数字的值取决于++的行为。