既然新的 c++11 标准已经对序列点的描述方式进行了更改,我正试图找出 c++03 和 c++11 之间到底发生了什么变化。
特别是,在任何情况下,看起来相同的代码在 c++11 中会有序列点,但在 c++03 中没有?
既然新的 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 中,每个赋值都在下一次评估之前排序。
在标准中寻找差异是很困难的,因为他们摆脱了“序列点”术语,取而代之的是“之前排序”等,并且从头开始重写了许多规则。