有人可以解释为什么以下两个片段有不同的输出?
int x=0;
cout<<x++<<" "<<x++;
和
int x=0;
cout<<x++<<" ";
cout<<x++;
答案 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 ,但如果您在下一次运行x
,cout<<x
将再次 2 线。