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

时间:2014-04-14 13:32:34

标签: c++ c++11

在构造函数的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;  
}

当rvalue传入构造函数时,在哪些情况下可以复制省略?

1 个答案:

答案 0 :(得分:1)

如果类型的移动构造函数很便宜,你应该“按值传递然后移动构造”,否则使用“按引用传递然后复制构造”。

对于左值

按值传递,然后移动构造

您将进行一次复制,然后进行一次移动。

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

你将做一个副本

对于Rvalues

按值传递,然后移动构造

在最好的情况下(当rvalue是临时表达式时),你将不进行复制/不移动,然后进行移动。

在正常情况下(当rvalue不是临时表达式时),你将进行一次移动,然后进行另一次移动。

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

你将做一个副本