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