簡體   English   中英

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、非 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM