2013-11-04 59 views

回答

5
ClassName variable(arg1); 

這是直接初始化。假設它是一個類的類型,通過將參數傳遞給合適的構造函數來初始化該對象。如果沒有合適的構造函數,這是一個錯誤。

ClassName variable = ClassName(arg1); 

這是複製初始化。從概念上講,它創建並直接初始化臨時;然後通過複製或移動臨時對變量進行初始化。如果沒有合適的移動或複製構造函數,這是一個錯誤。

在實踐中,複製或移動很可能會被忽略,所以結果將與直接初始化相同 - 除了仍然存在可訪問的移動或複製構造函數,即使它沒有被實際使用。

2
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是從編譯器去除不必要的調用來構造/複製/自毀並且在這種情況下,它們是相同的優化。

相關問題