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