c++ - C++中的打印顺序

标签 c++ compiler-optimization cout

Possible Duplicate:
What is the correct answer for cout << c++ << c;?

我有以下代码-

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 中将其关闭???

最佳答案

实际上,operator<< 是一个函数调用,c++ 可以按照它喜欢的任何顺序计算传递给函数的参数,因此++c inc 首先由你的编译器完成,非常合法 - 我的编译器做了一些事情不同。

有趣的是我的编译器打印

8       8       8       7       7

一些编译器提供了函数参数求值顺序的开关,但如果你真的需要使用它,我会问自己这样做的原因,因为代码有更多错误,而是以可移植的方式编写它.

关于c++ - C++中的打印顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683893/

相关文章:

c++ - "Attach to Process"而不是 "Local Windows Debugger"

c++ - Cout 和 Cerr 不同步

C++:多项式矩阵的输出

c++ - 为什么 Clang 优化这段代码?

用 7 条指令将 C 语言编译成 MIPS 汇编语言?

c++ - 在 GUI 或控制台 (cout) 中报告进度的方式

c++ - 按行、列和深度顺序打印多维 vector

c++ - 静态包含dll文件

c++ - 为什么我的静态分析器无法找到潜在的未初始化读取?

c++ - 是否可以保证带有 UB 的代码是否可以访问?