单个cout中的多个++语句

时间:2014-02-01 07:09:25

标签: c++ cout

有人可以解释为什么以下两个片段有不同的输出?

int x=0;
cout<<x++<<" "<<x++;

int x=0;
cout<<x++<<" ";
cout<<x++;

3 个答案:

答案 0 :(得分:1)

前者是未定义的行为,因为它涉及对x的两次无序写入。未定义的行为意味着任何事情都会发生。

答案 1 :(得分:0)

对两个序列点之间的同一对象进行多次写入是未定义的行为。您的第一个代码段会在下一个序列点出现之前两次修改x的值,因此它是未定义的行为。不要写这样的代码。在不同的实现上探索此代码的可能输出也没有意义。

答案 2 :(得分:-2)

int x = 0; cout<<x++<<" "<<x++

类似于,

int x = 0;
cout<<x;
cout<<" ";
x = x+1;
x = x+1;

因此,在该行,您将打印 0 ,而x 2 ,如果您在该行下方运行cout<<x

第二个陈述,

int x=0; cout<<x++<<" "; cout<<x++;

相当于,

int x =0;
cout<<x;
cout<<" ";
x = x+1; //note x gets 1 here
cout<<x; //will print 1 here due previous increment, not the second one
x = x +1;

因此,在这种情况下,您将打印 1 ,但如果您在下一次运行xcout<<x将再次 2 线。