[英]Overload resolution between const lvalue reference and rvalue reference
[英]Do I need to overload methods accepting const lvalue reference for rvalue references explicitly?
目前,我正在使用右值引用(C ++ 11,帶有gnu ++ x0的g ++),並且我想在我的類中實現移動語義,因為它感覺“不錯”。
我是否需要重載通常會接受const lvalue引用的每個函數以從rvalue引用中受益?
假設這是我的示例類:
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與rvalue引用一起使用,並消除不必要的副本。
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決定如何復制自身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.