簡體   English   中英

我是否需要重載顯式接受const左值引用作為右值引用的方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM