是否存在代码在c++11中有一个序列点而在c++03中没有的情况

Are there any situations where code would have a sequence point in c++11 but not c++03?

本文关键字:c++03 情况 代码 存在 c++11 有一个 是否      更新时间:2023-10-16

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

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

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

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

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

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

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

在标准中搜索差异是很困难的,因为它们去掉了"序列点"术语,转而使用"有序之前"之类的术语,并从头开始重写了许多规则。