2013-04-01 46 views
4

如果iint,像++i + ++i這樣的表達式是未定義的行爲,因爲有2個未經過序列化的i修改。但是,如果i是一些類似int的類,則++i + ++i改爲具有不確定的排序修改,因此是定義的行爲(在此情況下具有確定性結果)。有沒有這樣的情況:對基元進行操作是不是有序的,而不是不確定的序列呢?如果是這樣,爲什麼這種情況不適用於用戶創建的類型?如果不是的話,爲什麼原始操作根本就沒有被確定?爲什麼原始類型的操作不是被序列化的,而是被不確定地排序的?

+2

未定義的行爲可能允許編譯器應用特定類別的優化。一般來說,這些優化不太可能適用於UDT,因爲++ i然後只是函數調用的語法糖。 –

回答

3

通常,儘可能多的「不確定」。

不可能讓兩個函數在C++中運行交織。因此,不可能運行兩個operator++實現交錯。

因此,對於實現operator++的類類型,這是不確定的順序。

相關問題