複製初始化 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 或零次,大多數編譯器將選擇後者。