对c或c ++中的递增和递减运算符感到困惑。预增量或预减量背后的实际逻辑是什么?

问题描述 投票:-1回答:1
int a = 3;
cout << ++a << a++ << ++a << a++ << endl;

codeblocks :: mingw上这段代码的答案是7573。我到现在所知道的是,后增量是正确的,但前增量有一些不同的逻辑。对于所有预增量,最后一个增量的最后一个值将是相同的。任何人都可以用++ a告诉我实际发生了什么。

还有一件事需要从右到左解决。谢谢你的回答。

c++
1个回答
6
投票

Since C++17:

在移位算子表达式E1<<E2E1>>E2中,E1的每个值计算和副作用在E2的每个值计算和副作用之前被排序。

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

在C ++ 17之前,代码导致了未定义的行为as explained here。您的输出表明您使用的是旧编译器(或在旧模式下调用编译器)。

© www.soinside.com 2019 - 2024. All rights reserved.