3 回答

TA貢獻2003條經驗 獲得超2個贊
const& 意味著,此重載將僅用于const,non-const和lvalue對象。
const A a = A();
*a;
& 意味著,此重載將僅用于非const對象。
A a;
*a;
&& 意味著,此重載將僅用于右值對象。
*A();
有關C ++ 11標準此功能的更多信息,您可以閱讀這篇文章什么是“ * this的右值參考”?

TA貢獻1785條經驗 獲得超8個贊
它是成員函數ref限定符,它是C ++ 11中添加的功能之一。this通過指定函數ref限定符(一些細節),可以基于隱式對象參數是左值還是右值來重載非靜態成員函數。
要指定REF-預選賽非靜態成員函數,您可以用限定功能&或&&。
#include <iostream>
struct myStruct {
void func() & { std::cout << "lvalue\n"; }
void func() &&{ std::cout << "rvalue\n"; }
};
int main(){
myStruct s;
s.func(); // prints "lvalue"
std::move(s).func(); // prints "rvalue"
myStruct().func(); // prints "rvalue"
}

TA貢獻1773條經驗 獲得超3個贊
正如您所問的,這些并不是“必需的”。但是它們提供了某些可選的優化。您可能只是擁有T operator *();
而已-可以編譯,但是會產生一些奇怪的后果- *p = x
不會做您期望的事情。我認為重要的是返回類型-我們想要具有不同返回類型的多個重載。一旦了解了不同返回類型的可取性,您還將看到我們最終需要使用限定符來控制每個調用使用哪種重載(以及哪種返回類型)。
- 3 回答
- 0 關注
- 922 瀏覽
添加回答
舉報