2013-05-28 95 views
6

對象的兩個初始化之間是否存在差異?C++對象初始化和構造函數語義

Object obj(constructor_arguments); 

Object obj = Object(constructor_arguments); 

注意,第二初始化並不旨在以與操作者new的指針。它旨在成爲一個非堆變量。

在海灣合作委員會都編譯和工作正常,我想知道是否實際上有任何差異或如果兩個語句語義相同。

+1

查看是否存在實際差異的最佳方法是檢查生成的彙編代碼。第一次初始化更好,但如果讓編譯器發揮它的魔力,第二次初始化可能會優化爲同樣的東西。 –

+1

可能的重複http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – syam

+0

@MarcClaesen這意味着看着生成的代碼isn最好的辦法。事實上,這是最糟糕的方式(在這種情況下),因爲它可能導致錯誤的結論。 –

回答

11

是的。第一種是直接初始化的語法,第二種是複製初始化。

從理論上講,第二個調用複製構造函數,但這是受到優化。

相關問題