【发布时间】:2012-03-06 19:22:22
【问题描述】:
现在新的 c++11 标准已经改变了序列点的描述方式,我试图找出 c++03 和 c++11 之间到底发生了什么变化。
特别是,在任何情况下,看起来相同的代码在 c++11 中会有序列点,但在 c++03 中没有?
【问题讨论】:
标签: c++ c++11 sequence-points
现在新的 c++11 标准已经改变了序列点的描述方式,我试图找出 c++03 和 c++11 之间到底发生了什么变化。
特别是,在任何情况下,看起来相同的代码在 c++11 中会有序列点,但在 c++03 中没有?
【问题讨论】:
标签: c++ c++11 sequence-points
我认为最著名的例子是前置自增运算符。
int i = 0;
++ ++ ++ i;
在 C++03 中,这将是 UB,而在 C++11 中,每个赋值都在下一次评估之前排序。
在标准中搜索差异是很困难的,因为他们摆脱了“序列点”术语,取而代之的是“之前排序”等,并且从头开始重写了许多规则。
【讨论】:
Searching the Standard for differences is tough because they got rid of the "sequence point" terminology 这就是我发布这个问题的确切原因。
C++11 中没有序列点,而是有先序后序关系。
这里有一些简单的例子,其中 C++03 和 C++11 之间的行为不同
int x = 10;
++++x; // well defined in C++11
int x = 10;
x = ++x +1; //well defined in C++11
为什么?看看this的回答和相关的帖子。
【讨论】: