複製初始化 elision

如果使用 prvalue 表示式來複制初始化變數,並且該變數與 prvalue 表示式具有相同的型別,則可以省略複製。

std::string str = std::string("foo");

複製初始化有效地將其轉換為 std::string str("foo");(存在細微差別)。

這也適用於返回值:

std::string func()
{
  return std::string("foo");
}

std::string str = func();

如果沒有複製省略,這將引發 2 次呼叫 std::string 的移動建構函式。複製省略允許此呼叫移動建構函式 1 或零次,大多數編譯器將選擇後者。