操作员评估指令后

Post operator evaluation order

本文关键字:指令 评估 操作员      更新时间:2023-10-16

我和朋友偶然发现了一个有趣的笑话C > C++,因为他喜欢C而不是C++。然而,我很好奇执行该代码段的有效性。我运行并编译了

int C;
C = 1;std::cout << (C++ < C) << "n";
C = 1;std::cout << (C < C++) << "n";
C = 1;std::cout << (C++ > C) << "n";
C = 1;std::cout << (C > C++) << "n";

使用C++98/C++11时的输出为1 0 0 1,Java的输出为true、false、false和false。

我的问题是,评估这些声明的过程是如何运作的?我特别困惑,因为C++ < CC > C++在Java中相互矛盾,而在C++中保持一致,以及C++ < C的逻辑,其中假定左侧和右侧相等或左侧大于右侧。

由于未指定求值顺序,因此规范未定义C/C++的结果。有关详细信息,请参阅此答案。