为什么在这个程序的执行过程中,y从来不显示为1 ?

Why, during the execution of this program, is y never displayed as 1?

本文关键字:从来不 显示 过程中 程序 执行 为什么      更新时间:2023-10-16

我上了一节c++入门课,今天教授讲的是循环、递增和递减。所以我们检查了一个简单的do-while循环要运行多少次,我注意到在下面的代码输出过程中,int y首先显示为2,然而,增量的后缀符号是首先使用的,根据我的教授的说法,它也具有优先权(就像在显示的x变量中一样)。那么为什么y不首先显示为:"1 3"在输出窗口?

可能是一个非常简单的答案,但他没有立即知道,并要求我们看看是否能找出答案。我们使用的是devc++的最新版本。

#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语句将信息显示到控制台之前执行。
但是寻找一个更精确的答案/解释

++y在传递给operator<<(std::ostream&, const int&)之前增加并赋给y的新值,在operator<<(std::ostream&,const int&)返回

后,++y增加并赋值y

第一次输出的结果是2,因为y=1传递给了operator <<调用y++来打印2,然后调用操作符<<2.

第二次调用operator<<如果y将y设置为2,则在将引用传递给操作符<<y = 3