<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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ì)象起的別名,必須被初始化,與變量綁定到一起,且將一直綁定在一起。

          我們通過 & 來(lái)獲得左值引用, ?
          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ù)。

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

          右值引用的基本語(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. 左值可以被賦值,右值不可以被賦值,可以用來(lái)給左值賦值。

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

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


          推薦:

          面試常問的 C/C++ 問題,你能答上來(lái)幾個(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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  97福利导航 | 无码乱伦网站 | 五月婷婷久久综合 | 国产后入在线观看 | 狠狠干狠狠噜 |