1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        C++ 面試被問到的“左值引用和右值引用”

        共 1375字,需瀏覽 3分鐘

         ·

        2022-05-09 22:22

        1.左值和右值

        在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、沒有名字的就是右值(將亡值或純右值)。

        舉個(gè)例子,int a = b+c, a 就是左值,其有變量名為a,通過&a可以獲取該變量的地址;表達(dá)式b+c、函數(shù)int func()的返回值是右值,在其被賦值給某一變量前,我們不能通過變量名找到它,&(b+c)這樣的操作則不會(huì)通過編譯。

        左值是可以放在賦值號(hào)左邊可以被賦值的值;左值必須要在內(nèi)存中有實(shí)體;

        右值當(dāng)在賦值號(hào)右邊取出值賦給其他變量的值;右值可以在內(nèi)存也可以在CPU寄存器。

        一個(gè)對(duì)象被用作右值時(shí),使用的是它的內(nèi)容(值),被當(dāng)作左值時(shí),使用的是它的地址。

        2.左值引用

        左值引用就是我們平常使用的“引用”。引用是為對(duì)象起的別名,必須被初始化,與變量綁定到一起,且將一直綁定在一起。

        我們通過 & 來獲得左值引用, ?
        type &引用名 = 左值表達(dá)式;?
        可以把引用綁定到一個(gè)左值上,而不能綁定到要求轉(zhuǎn)換的表達(dá)式、字面常量或是返回右值的表達(dá)式。舉個(gè)例子:

        int?i?=?42;
        int?&r?=?i;????//正確,左值引用
        int?&r1?=?i?*?42;???//錯(cuò)誤,?i*42是一個(gè)右值
        const?int?&r2?=?i?*?42;?//正確,可以將一個(gè)const的引用綁定到一個(gè)右值上

        3.右值引用

        右值引用是C++11中引入的新特性 , 它實(shí)現(xiàn)了轉(zhuǎn)移語(yǔ)義和精確傳遞。

        它的主要目的有兩個(gè)方面:

        1. 消除兩個(gè)對(duì)象交互時(shí)不必要的對(duì)象拷貝,節(jié)省運(yùn)算存儲(chǔ)資源,提高效率。

        2. 能夠更簡(jiǎn)潔明確地定義泛型函數(shù)。

        右值引用就是必須綁定到右值的引用,他有著與左值引用完全相反的綁定特性,我們通過 && 來獲得右值引用。

        右值引用的基本語(yǔ)法type &&引用名 = 右值表達(dá)式;

        右值有一個(gè)重要的性質(zhì)——只能綁定到一個(gè)將要銷毀的對(duì)象上。舉個(gè)例子:

        int??&&rr?=?i;??//錯(cuò)誤,i是一個(gè)變量,變量都是左值
        int?&&rr1?=?i?*42;??//正確,i*42是一個(gè)右值

        4、右值引用和左值引用的區(qū)別

        1. 左值可以尋址,而右值不可以。

        2. 左值可以被賦值,右值不可以被賦值,可以用來給左值賦值。

        3. 左值可變,右值不可變(僅對(duì)基礎(chǔ)類型適用,用戶自定義類型右值引用可以通過成員函數(shù)改變)。

        原文鏈接: https://blog.csdn.net/qq_41181857/article/details/107581632


        推薦:

        面試常問的 C/C++ 問題,你能答上來幾個(gè)?

        C++ 面試必問:深入理解虛函數(shù)表

        很多人搞不清 C++ 中的 delete 和 delete[ ] 的區(qū)別

        看懂別人的代碼,總得懂點(diǎn) C++ lambda 表達(dá)式吧

        Java、C++ 內(nèi)存模型都不知道,還敢說自己是高級(jí)工程師?

        C++ std::thread 必須要熟悉的幾個(gè)知識(shí)點(diǎn)

        現(xiàn)代 C++ 并發(fā)編程基礎(chǔ)

        現(xiàn)代 C++ 智能指針使用入門

        c++ thread join 和 detach 到底有什么區(qū)別?

        C++ 面試八股文:list、vector、deque 比較

        C++經(jīng)典面試題(最全,面中率最高)

        C++ STL deque 容器底層實(shí)現(xiàn)原理(深度剖析)

        STL vector push_back 和 emplace_back 區(qū)別

        了解 C++ 多態(tài)與虛函數(shù)表

        瀏覽 118
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人碰碰免费视频 | 国产乱婬A∨片免费观看 | 国产精品一区二区三区不卡 | 国精产品一区一区三区有限是什么 | 无码国产精品一区二区 | 丝袜无码| 小说区图片亚洲色综合丁香五月 | 国产乱子伦一区二区三区熟睡91 | 亚洲动漫一区 | 日美女逼逼 |