【发布时间】:2012-10-02 11:02:48
【问题描述】:
我有以下代码 -
int a= 7;
const int &b = a;
int &c = a;
如果我使用
cout << endl << ++c << '\t' << a << '\t' << b << '\t' << c;
打印出来
"8 7 7 8"
但是如果我使用
cout << endl << a << '\t' << b << '\t' << ++c << '\t' << a << '\t' << b << '\t' << c;
打印出来
"8 8 8 8 8 8"
这究竟是怎么发生的?它与优化有关吗?如果是,我如何在 ideone.com 中将其关闭???
【问题讨论】:
-
当你说
cout << ++c << c;时发生的事情有重复。不过,我不确定具体在哪里。 -
@nneonneo,就是这个,谢谢。
-
@nneonneo 谢谢……这是否意味着这将永远是未定义的,并且没有很好的解释这种行为???
-
是的。未定义的行为意味着未定义的行为。它的输出可能会根据编译器品牌、版本、标志、堆栈布局或完全不同函数中的代码而改变。当然,你总是可以通过查看汇编输出来解释它,但通常你无法预测编译器会做什么。
标签: c++ compiler-optimization cout