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

时间:2018-07-20 03:40:59

标签: c++

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

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

还有另一件事,需要从右到左求解代码。 感谢您的回答。

1 个答案:

答案 0 :(得分:6)

Since C++17:

  

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

因此,输出定义明确,应为4466

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