是否有任何代码在C++ 11中有顺序点而不是C++ 03的情况?
问题描述:
既然新的C++ 11标准已经对序列点的描述进行了改变,我试图找出C++ 03和C++ 11之间究竟发生了什么变化。是否有任何代码在C++ 11中有顺序点而不是C++ 03的情况?
特别是,有什么情况下,看起来相同的代码在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
为什么之间不同?看看this的答案和相关的线程。
答
我认为最有名的例子是预增加运算符。
int i = 0;
++ ++ ++ i;
在C++ 03中,这将是UB,而在C++ 11中,每个赋值都在下一次评估之前排序。
寻找差异的标准很困难,因为他们摆脱了“顺序点”术语而偏爱“之前排序”之类的内容,并且从头开始重写了大部分规则。
'寻找差异的标准是很难的,因为他们摆脱了“序列点”的术语'这是我发布这个问题的确切原因。 – shuttle87 2012-02-15 12:49:23
@ shuttle87是的,对不起,但至少我想出了一个例子; v) – Potatoswatter 2012-02-15 12:50:36