什麼時候該使用指標和引用

來源:互聯網
上載者:User

  引用是c++引入的新類型,所以c++引用的語義讓很多新手頗為頭疼。

  引用就是一個對象的別名。對於一個變數的引用進行操作,作用效果會直接反映到這個變數上。

  引用在聲明的時候必須要初始化,否則編譯器會提示錯誤,所以引用一定不為空白。

      int i = 20;

      int& j = i;

      int& k; //錯誤,必須要初始化

      ++j;    //引用j本身不變,執行的是i++

      extern int& k; // ok,k在別的地方被定義

  另外,對引用進行取地址操作,返回的是引用指向的對象的地址。在一般的情況下,編譯器不會為引用分配空間。編譯器編譯的時候,看到引用,只是在符號表裡增加一個記號。

   引用作為類的member成員時,編譯器會為它分配空間。

   引用的生命期就是它所引用的對象的生命期。加入一個對象失效了,那麼它的引用必然會失效。所以在函數裡返回一個局部對象的引用是很危險的。比如說:

   int&  func()

  {

      int i = 20;

      int& k = i;

      return k;   //返回一個局部對象的引用,函數調用後,k所以用的i已經失效。

   }

   記得以前面試的時候,遇到這樣一個面試題:

   int*& 和 int&* 分別代表什麼意思?

   很遺憾那時我第一次遇到這個問題,沒有答上來。正確答案是:

   int*& 聲明的是指向int型指標的引用,而int&*不是合法的聲明。指向引用的指標是非法的,因為引用根本不佔記憶體。

 

   相對於引用,指標的語義相對簡單很多。回到本文的標題,什麼情況下改用引用,什麼情況下改用指標呢?

   由於引用的一旦初始化便不可修改的特點,如果你知道可以總是指向一個對象,一旦指向一個對象,便不需要修改的時候,可以選擇引用。如果有可能指向,有可能不指向,那麼要使用指標。

 

   另外,引用一般用於參數的傳遞,用來防止對象的拷貝帶來的開銷。用於傳遞對象參數時,建議使用引用。

   還有,為容器定義[]操作符是,返回的是引用。此時返回指標總是怪怪的。

 

   由於指標和引用有著不同的語義,所以大家在使用時,一定要明白語義上的差別,以免發生不必要的麻煩。

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.