9

既然新的 c++11 标准已经对序列点的描述方式进行了更改,我正试图找出 c++03 和 c++11 之间到底发生了什么变化。

特别是,在任何情况下,看起来相同的代码在 c++11 中会有序列点,但在 c++03 中没有?

4

2 回答 2

9

在 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

为什么?看看这个答案和相关线程。

于 2012-02-15T12:46:54.030 回答
4

我认为最著名的例子是预增量运算符。

int i = 0;
++ ++ ++ i;

在 C++03 中,这将是 UB,而在 C++11 中,每个赋值都在下一次评估之前排序。

在标准中寻找差异是很困难的,因为他们摆脱了“序列点”术语,取而代之的是“之前排序”等,并且从头开始重写了许多规则。

于 2012-02-15T12:46:18.157 回答