c ++中的打印顺序

时间:2012-10-02 02:46:46

标签: c++ compiler-optimization cout

  

可能重复:
  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中关闭它?

2 个答案:

答案 0 :(得分:3)

有效地操作员&lt;&lt;是一个函数调用,允许c ++按照它喜欢的任何顺序计算传递给函数的参数,因此++ c inc首先由你的编译器完全合法地完成 - 我做了不同的事情。

我的编译器间隔打印

8       8       8       7       7

有些编译器为函数参数的评估顺序提供了开关,但是如果你真的需要使用它,我会质疑自己的原因,因为代码有更多错误,而是以便携方式编写

答案 1 :(得分:2)

abc都是同一个对象。但是,未定义函数参数的计算顺序。所以,无论编译器选择首先评估什么都可以。看来,在您的第二个表达式中,它首先评估++c。避免问题的方法不是将修改与表达式的其余部分一起折叠,即在输出之前或之后递增c