Skip to content

败犬日报 2024-11-02

1. "pass-by-value and move"

构造函数或给成员赋值的函数,如果参数是 const T &argT &&arg,被称为 "pass-by-reference"。

cpp
struct Creature {
    std::string m_name;
    Creature(const std::string &name) : m_name{name} {}
    Creature(std::string &&name) : m_name{name} {}
    // 也可以使用完美转发,略
};

如果参数是 T arg,被称为 "pass-by-value and move"。

cpp
struct Creature {
    std::string m_name;
    Creature(std::string name) : m_name{std::move(name)} {}
};

"pass-by-value and move" 相比之下会多一次移动,但是写起来更简洁,适用于移动开销小的类型。

https://stackoverflow.com/questions/51705967/advantages-of-pass-by-value-and-stdmove-over-pass-by-reference