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 关注
- 903 浏览
添加回答
举报