可以将下面的代码:
class Widget {
public:
void addName(const std::string& newName)
{ names.push_back(newName); }
void addName(std::string&& newName)
{ names.push_back(std::move(newName)); }
...
private:
std::vector<std::string> names;
};改写成:
class Widget {
public:
void addName(std::string newName)
{ names.push_back(std::move(newName)); }
...
};对于可复制的、在移动成本低并且一定会被复制的形参而言,按值传递可能会和按引用传递的具备相近的效率,并可能生成更少量的目标代码。
经由构造复制形参的成本可能比仅有赋值复制形参高出很多。
按值传递肯定会导致切片问题,所以基类型特别不适用于按值传递。