Skip to content

Latest commit

 

History

History
34 lines (26 loc) · 917 Bytes

File metadata and controls

34 lines (26 loc) · 917 Bytes

条款41:针对可复制的形参,在移动成本低并且一定会被复制的前提下,考虑将其按值传递

可以将下面的代码:

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)); }
    ...
};

对于可复制的、在移动成本低并且一定会被复制的形参而言,按值传递可能会和按引用传递的具备相近的效率,并可能生成更少量的目标代码。

经由构造复制形参的成本可能比仅有赋值复制形参高出很多。

按值传递肯定会导致切片问题,所以基类型特别不适用于按值传递。