【发布时间】:2013-03-24 15:45:04
【问题描述】:
下面的一些代码:
int x = 1;
printf("%d,%d,%d",x,x++,x); //A statement
cout<<x<<x++<<x<<endl; //B statement
我知道执行顺序是从右到左,而为什么A语句的结果是“1,1,1” 而B语句结果为“112”???
我用的是vs2008 使用调试模式:结果相同:2,1,2。 with release mode: 结果不同:A: 1,1,1, B:1,1,2
【问题讨论】:
-
您的问题标签很好地为您回答了整个主题。
-
有很多不同之处。但在这两种情况下,您都在调用未定义的行为。
-
“我知道执行顺序是从右到左,” - 你呢?这很有趣,因为标准不同意。
-
@KinjalPatel:参见 C99 §7.19.3/7:“[...] 标准输入和标准输出流被完全缓冲当且仅当流可以确定不引用交互式设备。”
标签: c++ c printf cout post-increment