C++中成员函数的 const& & 和 && 说明符
const& , & and && specifiers for member functions in C++
>最近我在阅读boost::optional
的API时遇到了以下几行:
T const& operator *() const& ;
T& operator *() & ;
T&& operator *() && ;
我还编写了自己的程序,将成员函数定义为 const&&和 &&(请注意,我不是在谈论返回类型,而是分号之前的说明符),它们似乎工作正常。
我知道声明成员函数 const 意味着什么,但任何人都可以解释声明它 const&&&和 &&= 的含义。
const&
表示此重载将仅用于常量、非常量和左值对象,例如:
const A a = A();
*a;
&
意味着此重载将仅用于非 const 对象:
A a;
*a;
&&
意味着此重载将仅用于右值对象:
*A();
有关 C++11 标准此功能的更多信息,您可以阅读这篇文章:什么是"*this"的右值引用"?
它是一个成员函数 ref 限定符;它是 C++11 中添加的功能之一。可以通过指定函数 ref 限定符(一些详细信息)来重载非静态成员函数,具体取决于隐式 this
对象参数是左值还是右值。
若要为非静态成员函数指定 ref 限定符,可以使用 &
或 &&
限定函数。
#include <iostream>
struct myStruct {
void func() & { std::cout << "lvaluen"; }
void func() &&{ std::cout << "rvaluen"; }
};
int main(){
myStruct s;
s.func(); // prints "lvalue"
std::move(s).func(); // prints "rvalue"
myStruct().func(); // prints "rvalue"
}