复制初始化 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 或零次,大多数编译器将选择后者。