亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++中成員函數的const&,&和&&&說明符

C ++中成員函數的const&,&和&&&說明符

C++
桃花長相依 2019-11-29 11:11:21
最近,我正在閱讀的API,boost::optional發現其中的內容:T const& operator *() const& ;T&       operator *() & ;T&&      operator *() && ;我還編寫了自己的程序,該程序將成員函數定義為const&,&和&&(請注意,我并不是在講返回類型,而是在分號之前的說明符),并且它們似乎可以正常工作。我知道聲明成員函數const的含義,但是任何人都可以解釋聲明const&,&和&&的含義。
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

const& 意味著,此重載將僅用于const,non-const和lvalue對象。


const A a = A();

*a;

& 意味著,此重載將僅用于非const對象。


A a;

*a;

&& 意味著,此重載將僅用于右值對象。


*A();

有關C ++ 11標準此功能的更多信息,您可以閱讀這篇文章什么是“ * this的右值參考”?


查看完整回答
反對 回復 2019-11-29
?
慕的地10843

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"

}


查看完整回答
反對 回復 2019-11-29
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

正如您所問的,這些并不是“必需的”。但是它們提供了某些可選的優化。您可能只是擁有T operator *();而已-可以編譯,但是會產生一些奇怪的后果- *p = x不會做您期望的事情。我認為重要的是返回類型-我們想要具有不同返回類型的多個重載。一旦了解了不同返回類型的可取性,您還將看到我們最終需要使用限定符來控制每個調用使用哪種重載(以及哪種返回類型)。

查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 922 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號