C++中成员函数的 const& & 和 && 说明符

const& , & and && specifiers for member functions in C++

本文关键字:说明符 const 成员 函数 C++      更新时间:2023-10-16

>最近我在阅读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"
}