6
對象的兩個初始化之間是否存在差異?C++對象初始化和構造函數語義
Object obj(constructor_arguments);
或
Object obj = Object(constructor_arguments);
注意,第二初始化並不旨在以與操作者new
的指針。它旨在成爲一個非堆變量。
在海灣合作委員會都編譯和工作正常,我想知道是否實際上有任何差異或如果兩個語句語義相同。
對象的兩個初始化之間是否存在差異?C++對象初始化和構造函數語義
Object obj(constructor_arguments);
或
Object obj = Object(constructor_arguments);
注意,第二初始化並不旨在以與操作者new
的指針。它旨在成爲一個非堆變量。
在海灣合作委員會都編譯和工作正常,我想知道是否實際上有任何差異或如果兩個語句語義相同。
是的。第一種是直接初始化的語法,第二種是複製初始化。
從理論上講,第二個調用複製構造函數,但這是受到優化。
查看是否存在實際差異的最佳方法是檢查生成的彙編代碼。第一次初始化更好,但如果讓編譯器發揮它的魔力,第二次初始化可能會優化爲同樣的東西。 –
可能的重複http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati – syam
@MarcClaesen這意味着看着生成的代碼isn最好的辦法。事實上,這是最糟糕的方式(在這種情況下),因爲它可能導致錯誤的結論。 –