C++11 左值、右值引用

看了這方面的內(nèi)容,還是一知半解,簡單總結(jié)一下

左值和右值

簡單來講,左值就是能放在等號左邊,也能放在等號右邊的值,而右值是只能放在等號右邊的值。至于怎么區(qū)分,我覺得不需要特意去學習,用得多了自然也就熟悉了。

左值引用

左值引用有兩種:左值引用和常左值引用。

  • 左值引用&:只能引用左值
  • 常左值引用const &:可以引用左值和右值
    int x = 1;
    int& y0;  //編譯器報錯“引用變量需要初始值設(shè)定項”
    int& y1 = x;  //可以
    int& y2 = 1;  //編譯器報錯“非常量引用的初始值必須為左值”
    const int& z0;  //編譯器報錯“引用變量需要初始值設(shè)定項”
    const int& z1 = x;  //可以
    const int& z1 = 1;  //可以

右值引用

  • 只能對右值進行引用
    注意右值引用等號左邊的類型必須是具體的類型,不能是auto或者模板參數(shù)T
    int x = 1;  
    int&& a0;  //編譯器報錯“引用變量需要初始值設(shè)定項”
    int&& a1 = x;  //編譯器報錯“無法將右值引用綁定到左值”
    int&& a2 = 1;  //可以
    const int&& b0;  //編譯器報錯“引用變量需要初始值設(shè)定項”
    const int&& b1 = x;  //編譯器報錯“無法將右值引用綁定到左值”
    const int&& b2 = 1;  //可以

萬能引用

萬能引用可以是左值引用,也可以是右值引用。具體是那種引用是根據(jù)引用對象推導出來的。

  • 引用對象是左值,該萬能引用是左值引用


    image.png
  • 引用對象是右值,該萬能引用是右值引用


    image.png
  • 存在類型推導才是萬能引用,也就是有這兩種情況是萬能引用:一是有auto,二是存在模板參數(shù)T


    image.png
  • 萬能引用只能推導引用類型,轉(zhuǎn)換成左值引用或右值引用,并不能轉(zhuǎn)換變量值的類型,也就是說不管等號右邊的值是左值還是右值,得到等號左邊的值永遠是左值
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容