是按值传递然后移动构造更好,还是按引用传递然后复制构造更好

Is it better to pass-by-value and then move-construct or to pass-by-reference and then copy-construct

本文关键字:更好 然后 按引用传递 复制 按值传递 移动      更新时间:2023-10-16

在C++11中的构造函数中,最好执行以下操作吗:

class A
{
  A(std::string str) : mStr(std::move(str)) {}
  std::string mStr;  
}

或进行

class A
{
  A(const std::string& str) : mStr(str) {}
  std::string mStr;  
}

在哪些情况下,当将右值传递给构造函数时,会发生复制省略?

如果类型的移动构造函数价格低廉,则应该执行"按值传递,然后移动构造",否则应使用"按引用传递,然后复制构造"。

对于lvalues

传递值,然后移动构造

你将做一个拷贝,然后做一个动作。

通过引用传递,然后复制构造

你将做一份

对于R值

传递值,然后移动构造

在最好的情况下(当右值是一个临时表达式时),您将不执行复制/不移动,然后执行移动。

在正常情况下(当右值不是临时表达式时),您将执行一个移动,然后执行另一个移动。

通过引用传递,然后复制构造

您将进行一次复制