在构造函数的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传入构造函数时,在哪些情况下可以复制省略?
答案 0 :(得分:1)
如果类型的移动构造函数很便宜,你应该“按值传递然后移动构造”,否则使用“按引用传递然后复制构造”。
您将进行一次复制,然后进行一次移动。
你将做一个副本
在最好的情况下(当rvalue是临时表达式时),你将不进行复制/不移动,然后进行移动。
在正常情况下(当rvalue不是临时表达式时),你将进行一次移动,然后进行另一次移动。
你将做一个副本