int a = 3;
cout << ++a << a++ << ++a << a++ << endl;
此代码段的答案是在codeblocks :: mingw上的7573。我到现在为止的是,后递增以正确的方式进行,但预递增具有一些不同的逻辑。最后一个预增的最后一个值对于所有预增都是相同的。谁能告诉我++ a在那里实际发生了什么。
还有另一件事,需要从右到左求解代码。 感谢您的回答。
答案 0 :(得分:6)
在移位运算符表达式
E1<<E2
和E1>>E2
中,E1
的每个值计算和副作用在E2
的每个值计算和副作用之前进行排序>
因此,输出定义明确,应为4466
。
在C ++ 17之前,代码导致未定义的行为as explained here。您的输出表明您正在使用旧的编译器(或以旧模式调用编译器)。