c++ - 方法应该将 R 值引用作为输入有任何正当理由吗?

标签 c++ c++11

如标题中所述,我想知道给定类方法是否有正当理由/示例,不包括移动构造函数移动赋值运算符,或者自由函数应将 R 值引用作为输入参数。

最佳答案

保留值时避免不必要的拷贝。我喜欢将此功能称为“接收器功能”。这在定义 setter 时经常发生。

class A
{
private:
    std::string _s;

public:
    void setS(const std::string& s) { _s = s; }
    void setS(std::string&& s) { _s = std::move(s); }
};

int main()
{
    A a;
    std::string s{"some long string ......."};

    a.setS(s); // copies and retains `s`
    a.setS(std::move(s)); // moves and retains `s`
}

关于c++ - 方法应该将 R 值引用作为输入有任何正当理由吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937506/

相关文章:

c++ - lambda 表达式的右值和左值引用 - gcc 与 msvc

c++ - 扩展作为内存传递的 vector 的大小

c++ - 将 R 值传递给采用 L 值的函数时的重载歧义

c++ - c++中对象属性的内存分配

c++ - 是否可以在 C++ 中重载运算符 "..."?

c++ - std::shared_ptr _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 改变指针时

C++11 vector 在右值上进行复制

c++ - 为什么重载成员函数访问元组和递归累积结果失败?

c++ - 在 C++11 中通过对 std::thread 的引用传递对象

c# - UWP - 获取 Windows::UI::Xaml::Controls::TextBox.TextChanged 事件的文本更改