首页 > 解决方案 > 对 c 或 c++ 中的递增和递减运算符感到困惑。预增或预减背后的实际逻辑是什么

问题描述

int a = 3;
cout << ++a << a++ << ++a << a++ << endl;

此代码片段的答案是 codeblocks::mingw 上的 7573。到目前为止,我得到的是后增量以正确的方式进行,但前增量有一些不同的逻辑。最后一个预增量的最后一个值对于所有预增量都是相同的。谁能告诉我 ++a 到底发生了什么。

还有一件事需要从右到左解决代码。感谢您的任何回答。

标签: c++

解决方案


从 C++17: :

在移位运算符表达式E1<<E2andE1>>E2中,的每个值计算和副作用E1在每个值计算和副作用之前排序E2

所以输出是明确定义的,应该是4466.

在 C++17 之前,代码会导致未定义的行为,如此处所述。您的输出表明您正在使用旧编译器(或在旧模式下调用编译器)。


推荐阅读