c++引用的弊端-引用不如指針

c++中引入引用的概念是爲了操作符重載(見c++的設計與演化),scott meyers在其相關的Effective c++中也對引用和指針有過論述.
在我剛剛接觸引用的概念以後,我認爲這是一個極好的東西,在函數參數和成員變量中大量的使用他,但是很快我就發現引用不如指針了.
除了操作符重載引用是必須的以外,引用的一個其他的好處是對於函數參數傳遞來說,一般不用檢查引用是否是空(確實能夠把引用指向一個空對象,但是這是病態的做法),而對於指針一般至少也要assert一下.
不要小看這個是否爲空的檢查,可以省去不少的typing.
但是引用有一個固有的弊端,引用不能賦值,含有引用的類對象,不能生成默認的默認,copy構造和賦值函數(你必須給引用進行初始化的賦值,引用沒有默認值).
如果說上面的你還可以容忍,那麼在boost::bind中,對於引用的函數參數,你必須使用boost_ref或者boost_cref的wrapper class;而對指針則沒有這個限制.
我個人非常喜歡boost::bind(有了他,你不必再使用煩人的mem_fun之類的了),引用的函數參數給我帶來了很多的不便.
在C/C++中,值類型是一等公民(在C#/Java中,引用類型是一等公民),而指針天然有值類型的含義,或者從這個角度上,我們可以理解引用不如指針了. 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章