2014-07-03 17 views
0

我是新來的C++。 我被告知在內部或外部調用構造函數是相同的。 爲什麼賦值操作沒有涉及明確調用構造函數的情況?如何隱式地調用一個構造函數並調用一個構造函數明確證明是相同的

Object A(3)    //implicit 
Object A = Object(3);  //explicit 

我認爲當我們做Object(3)時會創建一個對象; 那麼這兩件事情怎麼會變得一樣呢?

+0

因爲雖然它使用賦值運算符,但它不是賦值。這是一個複製構造函數調用(允許對其進行優化,第2行可能與第1行完全相同)。 – Simple

+0

這兩者在語義上有所不同,可能做得完全一樣,並且不管結果如何都應該具有相同的結果。 – juanchopanza

+0

這些都是顯式調用的構造函數。 –

回答

0

有關主題的更多內容,請參閱this answer,但在處理已存在的對象時將調用賦值運算符。您會注意到複製構造函數的類似行爲:

Object A; 
// the following two lines will call the copy constructor 
// even if the assignment operator is defined. 
Object B = A; 
Object C(A); 
相關問題