【发布时间】:2016-09-30 17:21:55
【问题描述】:
看起来我们正在为 C++ 准备一个全新的“面试问题”(实际上我希望不会)。
已知在 C++17 之前是未定义的行为,但从 C++17 开始它会是良好定义的吗?
由于目前似乎没有编译器可以实现这种 C++17 修改,任何人都可以解释一下,根据表达式评估规则,x 的值将在以下代码中吗?
int i = 0;
int x = i++ + i++;
Alisdair Meredith 在他的 CppCon 2016 演讲中提到了这个例子 here,但我并不完全清楚 x 的最终值是多少(尽管他的意思是它至少是 1 )。
显然,i 本身在这种情况下将在表达式末尾为 2。
【问题讨论】:
-
@LeoHeinsaar 看来我们将来必须调整我们的反应;P ...
-
@πάνταῥεῖ 我明白,不用担心。没关系。 :-)
-
如果有人能解释一下这会有什么用就更好了。
-
万一在面试中被问到这样的问题,我宁愿应聘者回答:“即使它在未来的某个时候变得很好定义,这样的代码仍然应该是在我们的代码库中避免”。
标签: c++ language-lawyer undefined-behavior c++17 operator-precedence