簡體   English   中英

不帶類型推導的LValue和Rvalue的C ++參考

[英]C++ reference for both LValue and Rvalue without type deduction

我正在閱讀有關左值/右值引用的好教程。 如果我正確理解了類型推導,那么T&&類的東西就可以接受左值和右值。

但是,沒有通用類,有沒有辦法實現這一目標? 我想避免重復所有用於接受左值和右值的方法。 當然,要避免按價值傳遞大對象。

r值引用主要用於move-constructor和move賦值。

對於常規方法,您只能使用一種引用類型:

  • 對於只讀參數(無副本),使用const引用就足夠了。

  • 如果必須進行復制,則可以按值接受參數並使用std::move

例:

class Test
{
public:

    void displayString(const std::string& s) const { std::cout << s << m_s; }

    void setString(std::string s) { m_s = std::move(s); }

private:
    std::string m_s;
};

如果您實現的函數不需要右值語義,則可以簡單地通過引用或常量引用傳遞參數。

但是,如果您可以利用右值並且不想重復代碼,則可以按值傳遞並移動結果。 這應該比代碼復制或具有通用引用的實現幾乎有效,並且可以更容易維護。

這個答案說明了這項技術: C ++ 11中的所有/大多數設置器函數都應該編寫為接受通用引用的函數模板嗎?

// copy, then move
void set_a(A a_) { a = std::move(a_); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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