3 回答

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

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
它是成員函數(shù)ref限定符,它是C ++ 11中添加的功能之一。this通過(guò)指定函數(shù)ref限定符(一些細(xì)節(jié)),可以基于隱式對(duì)象參數(shù)是左值還是右值來(lái)重載非靜態(tài)成員函數(shù)。
要指定REF-預(yù)選賽非靜態(tài)成員函數(shù),您可以用限定功能&或&&。
#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貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如您所問(wèn)的,這些并不是“必需的”。但是它們提供了某些可選的優(yōu)化。您可能只是擁有T operator *();
而已-可以編譯,但是會(huì)產(chǎn)生一些奇怪的后果- *p = x
不會(huì)做您期望的事情。我認(rèn)為重要的是返回類(lèi)型-我們想要具有不同返回類(lèi)型的多個(gè)重載。一旦了解了不同返回類(lèi)型的可取性,您還將看到我們最終需要使用限定符來(lái)控制每個(gè)調(diào)用使用哪種重載(以及哪種返回類(lèi)型)。
- 3 回答
- 0 關(guān)注
- 920 瀏覽
添加回答
舉報(bào)