引數省略
將引數傳遞給函式,並且引數是函式引數型別的 prvalue 表示式 ,並且此型別不是引用時,可以省略 prvalue 的構造。
void func(std::string str) { ... }
func(std::string("foo"));
這表示要建立臨時 string
,然後將其移動到函式引數 str
中。複製 elision 允許此表示式直接在 str
中建立物件,而不是使用臨時+移動。
對於宣告建構函式 explicit
的情況,這是一個有用的優化。例如,我們可以將上面的內容寫成 func("foo")
,但這只是因為 string
有一個隱式建構函式,它從 const char*
轉換為 string
。如果該建構函式是 explicit
,我們將被迫使用臨時來呼叫 explicit
建構函式。複製省略使我們不必進行不必要的複製/移動。