具有后增量的奇怪程序输出

时间:2017-12-10 15:38:32

标签: c++

所以这个问题基本上是猜测输出程序。 我会具体的。

我理解的是x的价值是通过引用y传递的,这意味着我们对x所做的任何更改都会反映在y上,反之亦然。在第6行中,我们通过引用传递xy的值。

在第7行中,x会增加,因此x变为11,y也是如此。现在我希望输出为11 11,因为我们首先打印x,因此将打印出{11}的x,并且从y开始,它是后期增量因此将首先打印11,然后仅增加y。但我错了(显而易见)答案是12 11

我尝试过调试,并没有解释为什么会这样。经过一些谷歌搜索后,我发现有一个名为cout的规则,其中cout语句的执行从右到左发生,这意味着在第8行,由于后期增量y首先打印,然后递增以使x变为并变为12.但在这种情况下,输出再次是11 12而不是12 11。请你解释一下cout规则是否真的如此,如果是,你可以解释它是如何真正完成的,或者还有什么其他内容可以解决这个问题?感谢。

#include <iostream>
using namespace std;
int main()
{
    int x = 10;
    int &y = x;             // line 6
    x++;                    // line 7
    cout<< x << " " << y++; // line 8
    return 0; 
}

1 个答案:

答案 0 :(得分:0)

有些编制者会打印 11 11

而其他人会打印 12 11

标准没有定义案例中的顺序。

我仍然不明白你为什么使用这个参考?它没有改变任何东西,它就像下面这样:

#include<iostream> 
using namespace std;
int main()
{
  int x = 10;       
  x++;       
  cout<< x << " " << x++;         
  return 0; 
}