2015-12-27 27 views
0

我發現一個帶單個參數的構造函數稱爲轉換構造函數(C++ 03)。但這是否意味着特定的構造函數將隱式創建一個臨時對象,並將其分配給所需的對象(這對我們是不可見的)然後寫什麼不同 EgClass m = EgClass(1) and EgClass m = 1 EgClass(1)類型轉換爲EgClass嗎?(如果是這樣怎麼做? ?) 當我們寫EgClass m(1)時會發生什麼?如何轉換構造函數實際工作

+1

'X x = 1'和'X x = X(1);'是一樣的,它們創建一個可以優化出來的臨時對象。 'X x(1);'不是臨時的。 –

回答

0

但這是否意味着特定的構造函數將隱式創建一個臨時對象,並將其分配給所需的對象?

是的,但只是在形式上 - 在許多情況下,即使在優化關閉的情況下構建時,也會優化這些臨時對象。這意味着在構造函數中添加的任何日誌記錄都不會指示已創建此臨時文件。

那麼,什麼是書面的差異將EgClass M =將EgClass(1),將EgClass M = 1是否將EgClass(1)類型轉換的int將EgClass?(如果是的話怎麼會這樣呢?)

EgClass m=EgClass(1)它一樣EgClass m=1,你才能成像,當編譯器看到EgClass m=1將它轉換爲EgClass m=EgClass(1)再到EgClass m(EgClass(1))

是否將EgClass(1)類型轉換的int將EgClass?(如果是如何發生的呢?)

是的,1被轉換爲EgClass。這發生在臨時 - 但是再一次,形式上是暫時的,但是編譯器可以優化它。當我們寫將EgClass米(1)

整數1被轉換成類型將EgClass的對象

而且會發生什麼。沒有臨時創建,甚至正式。