是否需要重载接受const左值引用的方法来显式地进行右值引用?
Do I need to overload methods accepting const lvalue reference for rvalue references explicitly?
目前我正在玩右值引用(c++ 11, g++与gnu++x0),我想在我的类中实现移动语义,因为它只是感觉"正确"。
我是否需要重载每个通常会接受const左值引用的函数来从右值引用中受益?
假设这是我的示例类:
class Person {
public:
Person() = default;
Person(std::string &name);
Person(const Person &rhs);
Person(Person &&rhs);
Person& operator=(const Person &rhs);
Person& operator=(Person &&rhs);
std::string& get_name() const;
void set_name(const std::string &name);
private:
std::string name_;
}
/* snip */
void Person::set_name(const std::string &name)
{
this->name_ = name;
}
我现在想对右值引用使用setter,并消除不必要的复制。
Person test("Jon Doe");
test.set_name("Jon Doe2");
我真的需要这样重载每个方法吗?
void Person::set_name(std::string &&name)
{
this->name_ = std::move(name);
}
这对我来说似乎很多余。有什么方法可以更容易地实现这一点吗?谢谢!
我经常阅读stackoverflow,但这是我的第一个问题。所以如果我做错了什么请给我提示写一个函数。按值取值,然后移动。
void Person::set_name(std::string name)
{
this->name_ = std::move(name);
}
让std::string决定如何复制自己
相关文章:
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 为什么常量方法可以采用非常量引用?
- 没有取消引用/解包对象的标准方法?
- C++方法中的引用变量
- 引用文件的适当方法是什么?
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 对结构方法的未定义引用
- 通过基类接受方法转发派生 UniquePtr 的右值会移动引用而不是复制
- 使用移动语义:右值引用作为方法参数
- Unity3D 导入 C++ DLL 用于按引用方法传递
- 通过引用方法传递对象
- 无法将从函数返回的向量传递给需要引用方法的函数
- 正在调用指针和引用方法
- 与const引用(方法链)相关联的临时对象的生命周期
- 方法内部的简单c++成员引用(方法解析后的链接器错误)
- 被引用方法的未定义引用
- 无法引用方法
- 我如何在外面引用 C++ 方法