既然新的C++ 11標準已經對序列點的描述進行了改變,我試圖找出C++ 03和C++ 11之間究竟發生了什麼變化。是否有任何代碼在C++ 11中有順序點而不是C++ 03的情況?
特別是,有什麼情況下,看起來相同的代碼在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