Leo*_*aar 24 c++ operator-precedence undefined-behavior language-lawyer c++17
看起来我们正在为C++获得全新的"面试问题"(我希望不是,实际上).
众所周知,在C++ 17之前,它是未定义的行为,但它是否会从C++ 17开始明确定义?
由于目前似乎没有一个编译器实现了这个C++ 17修改,根据表达式评估规则,任何人都可以解释x在下面的代码中的值是什么?
int i = 0;
int x = i++ + i++;
Run Code Online (Sandbox Code Playgroud)
阿利斯代尔梅雷迪思提到这个例子在这里他CppCon 2016的谈话,但它并不完全清楚,我的最终值什么x会(虽然它似乎什么他要说的是,这将是至少1).
显然,i在这种情况下,本身将在表达式结尾处为2.
Nic*_*las 18
P0145R3(PDF)不会更改所有表达式的评估顺序.它只影响少数运营商.二进制加法不在该列表中.
因此,上述代码仍未定义.