[英]const& , & and && specifiers for member functions in C++
最近我正在閱讀boost::optional
的 API並遇到以下問題:
T const& operator *() const& ;
T& operator *() & ;
T&& operator *() && ;
我還編寫了自己的程序,將成員函數定義為 const&、& 和 &&(請注意,我不是在談論返回類型,而是在分號之前的說明符),它們似乎工作正常。
我知道聲明一個成員函數 const 意味着什么,但是任何人都可以解釋一下聲明它是什么意思 const&、& 和 &&。
const&
表示,此重載將僅用於 const、非 const 和左值對象。
const A a = A();
*a;
&
意味着,這個重載將只用於非常量對象。
A a;
*a;
&&
表示,此重載將僅用於右值對象。
*A();
有關 C++11 標准的此功能的更多信息,您可以閱讀這篇文章What is "rvalue reference for *this"?
它是一個成員函數 ref-qualifiers; 它是 C++11 中添加的功能之一。 通過指定函數 ref-qualifier(一些細節),可以根據隱式this
對象參數是左值還是右值來重載非靜態成員函數。
要為非靜態成員函數指定引用限定符,您可以使用&
或&&
限定函數。
#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"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.