你怎麼稱呼這兩種不同的方式,它們有什麼不同?ClassName變量(arg1)之間的區別;和ClassName variable = ClassName(arg1);
ClassName variable(arg1);
和
ClassName variable = ClassName(arg1);
你怎麼稱呼這兩種不同的方式,它們有什麼不同?ClassName變量(arg1)之間的區別;和ClassName variable = ClassName(arg1);
ClassName variable(arg1);
和
ClassName variable = ClassName(arg1);
ClassName variable(arg1);
這是直接初始化。假設它是一個類的類型,通過將參數傳遞給合適的構造函數來初始化該對象。如果沒有合適的構造函數,這是一個錯誤。
ClassName variable = ClassName(arg1);
這是複製初始化。從概念上講,它創建並直接初始化臨時;然後通過複製或移動臨時對變量進行初始化。如果沒有合適的移動或複製構造函數,這是一個錯誤。
在實踐中,複製或移動很可能會被忽略,所以結果將與直接初始化相同 - 除了仍然存在可訪問的移動或複製構造函數,即使它沒有被實際使用。
case 1:
ClassName variable(arg1);
//will initialize variable directly with the type constructor
case 2:
ClassName variable = ClassName(arg1);
//should initialize variable directly with a copy of the rvalue
//however because of RVO optimiziation this is tha same as case 1
RVO是從編譯器去除不必要的調用來構造/複製/自毀並且在這種情況下,它們是相同的優化。
直接初始化和複製初始化。見[這裏](http://www.gotw.ca/gotw/036.htm)。 – juanchopanza