2012-08-30 18 views
6

我有一個人聲稱該行沒有被覆蓋的C++標準:數組[i] = i ++是否覆蓋C++標準?

int i(1); 
array_of_int[i] = i++; 

上述人士表示,這將指派1但我們無法知道它是否會在array_of_int[1]array_of_int[2]雖然Visual Studio和最的編譯器將在array_of_int[1]

他是否正確?

+0

據我所知,這種行爲是由編譯器決定的,並沒有在C++標準中明確提出 – CatShoes

+4

可能的重複:http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behavior -iiiii等 - 這在其中一個答案中已經涵蓋。 – Mat

+0

請關閉或刪除我的問題,如果它是一個愚蠢的,我試圖找到它被問到,但沒有用正確的關鍵字制定我的搜索。 – BlueTrin

回答

6

這是未定義的行爲。從字面上看,任何行爲都是合法的。

,禁止該行的代碼的通道是這樣的:

之前和下一序列點的對象應具有其存儲的值由表達式的評估修飾的至多一次之間。此外,前一個值是隻讀以確定該值將被存儲

a[i]i++a[i]讀至i之間沒有序列點不用於確定什麼值被存儲在目的i by i++

+0

感謝您的解釋,我添加了一個鏈接到維基頁面的序列點 – BlueTrin

+1

序列點已從C++中刪除,並替換爲序列語句/子表達式之間的關係。 [見這裏](http://stackoverflow.com/a/10655884/365496)。這將一些未定義行爲的實例更改爲明確定義的行爲,但在這種特殊情況下並不適用。 – bames53

相關問題