为什么在执行此程序期间,y从不显示为1?

时间:2013-03-01 02:54:42

标签: c++ loops increment operator-precedence

参加一个简介c ++课程,今天的教授正在谈论循环,增量和减量。所以我们正在检查一个简单的do-while循环运行多少次,我注意到在输出以下代码时,int y首先显示为2,但是后缀符号首先使用增量,根据我的教授,也给出优先权(如显示的x变量)。那么为什么y没有首先显示为:“ 1 3 ”在输出窗口中?

可能是一个非常简单的答案,但他并不立即知道,并要求我们查看是否可以找到答案。我们使用的是dev c ++的最新版本。

#include <iostream>
using namespace std;

int main()
{
    int x=1;
    int y=1;

    do
    {
        cout << "x: " << " " << ++x << " " << x++ << endl;
        cout << "y: " << " " << y++ << " " << ++y << endl;
    }while(x<=10);

    return 0;
}

如果你运行它,显示将如下所示:

x:  3 1
y:  2 3
x:  5 3
y:  4 5
x:  7 5
y:  6 7
x:  9 7
y:  8 9
x:  11 9
y:  10 11

凭借我有限的理解,我想出了这个: 由于在同一语句中使用了多个递增操作,因此它们都是在cout语句向控制台显示信息之前执行的 但寻找更准确的答案/解释

1 个答案:

答案 0 :(得分:1)

++ y在int y的引用传递给operator<<(std::ostream&, const int&)之前递增并指定y的新值,并且y ++增量并在operator<<(std::ostream&,const int&)返回后指定y

所以,你第一次打印2,因为y = 1被传递给opertator&lt;&lt;调用y ++打印2,并在调用运算符&lt;&lt; y被分配2。

对运营商的第二次调用&lt;&lt;在y上将y设置为2,在将引用传递给运算符&lt;&lt;之前调用++ y而y是3。