引數省略

將引數傳遞給函式,並且引數是函式引數型別的 prvalue 表示式 ,並且此型別不是引用時,可以省略 prvalue 的構造。

void func(std::string str) { ... }

func(std::string("foo"));

這表示要建立臨時 string,然後將其移動到函式引數 str 中。複製 elision 允許此表示式直接在 str 中建立物件,而不是使用臨時+移動。

對於宣告建構函式 explicit 的情況,這是一個有用的優化。例如,我們可以將上面的內容寫成 func("foo"),但這只是因為 string 有一個隱式建構函式,它從 const char*轉換為 string。如果該建構函式是 explicit,我們將被迫使用臨時來呼叫 explicit 建構函式。複製省略使我們不必進行不必要的複製/移動。