c++ - 为什么在该程序执行期间,y 从未显示为 1?

标签 c++ loops increment operator-precedence

<分区>

参加了介绍性的 c++ 类(class),今天教授正在谈论循环、递增和递减。所以我们正在检查一个简单的 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 语句将信息显示到控制台之前执行。
但寻找可能更准确的答案/解释

最佳答案

++y 在将 int y 的引用传递给 operator<<(std::ostream&, const int&) 之前递增并分配 y 的新值y++ 在 operator<<(std::ostream&,const int&) 之后递增并赋值 y返回

所以,你第一次打印 2 因为 y=1 被传递给 operator<< y++ 被调用来打印 2,并且在调用 operator<< y 之后被赋值 2。

第二次调用 operator<< on y 将 y 设置为 2,在将引用传递给 operator<< 并且 y 为 3 之前调用++y。

关于c++ - 为什么在该程序执行期间,y 从未显示为 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15149693/

相关文章:

javascript - .on(click - 在增加分数时显示新图像 - jQuery

c++ - 如何在 Rcpp 中构建常量矩阵?

Python:遍历列表

Node.js - 使用异步库 - 带有对象的 async.foreach

ruby - 为什么我的 ruby 循环没有结束?

c++ - std::map::iterator 在增量时使程序崩溃

MySQL,自增,导出和导入

c++ - 为什么 C++ 不支持命名参数?

c++ - 如何使用 -std=c++17(可选、任意、string_view、变体)在 g++ 6.2.0 中包含 C++ 17 header

c++ - 当 Fortran 库中的 C++ 可执行文件链接到 C++ 库中的 main 时,链接器错误