《More Effective C++》筆記一

來源:互聯網
上載者:User

條款一
原話:當你需要考慮 不指向任何對象 的可能性時,或是考慮 在不同時間指向不同對象 的能力時,你就應該採用pointer。前一種情況你可以將 pointer設定為null,後一種情況你可以改變pointer所指對象。而當你確定 總是會代表某個對象,而且 一旦代表了該對象就不再能夠改變,那麼你應該選擇reference。

考慮四種情況:
1、pointer:聲明object*
2、const_pointer:聲明const objcect*
3、reference:聲明object&
4、const_reference:聲明const objcet&

pointer,可以指向object對象,也可以指向從object繼承的對象,只要是前面的對象都可以指向。
const_point,可以指向固定對象,一但指向了某個對象,它就不能夠指向其他對象了,當然對象裡面的變化,它不關心。reference和const_reference也是同樣的道理。

很多人會問,那麼pointer和reference有什麼區別呢?
或許看起來沒有什麼區別,你就這麼想吧,pointer到對象,是指向對象。而reference就是對象。這時候又有人問那麼reference和直接聲明的對象又有什麼區別呢?看看下面的用法:
C#的程式員可能有以下幻想
object&  ro = new objcet ;//VC7.1下聲明int& iValue=5;靜態編譯出現Error。
object  o = new object;
但事實上用法應該是這樣的,因為在C++裡的只能把new的對象給指標,例如object* po=new object。
object  o;
object&  ro = o;//
這個時候,他們沒有什麼區別,只不過是名字不同而已,一個為o,另一個為ro,這時候那個對象有兩個名字。

這時候可能又會想那麼const_refencence又是怎麼回事啊,那就是它所指代的對象不能變化(和const_pointer的區別),即對象狀態為const。
其實原本想劃幾個圖來表示,那就可以更加直觀了。可這個機子沒工具,以後再補拉。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.