2012-02-15 47 views

回答

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 

为什么之间不同?看看this的答案和相关的线程。

4

我认为最有名的例子是预增加运算符。

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

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

寻找差异的标准很困难,因为他们摆脱了“顺序点”术语而偏爱“之前排序”之类的内容,并且从头开始重写了大部分规则。

+0

'寻找差异的标准是很难的,因为他们摆脱了“序列点”的术语'这是我发布这个问题的确切原因。 – shuttle87 2012-02-15 12:49:23

+0

@ shuttle87是的,对不起,但至少我想出了一个例子; v) – Potatoswatter 2012-02-15 12:50:36