天天看點

effecitve c++ 條款21-25條款21: 盡可能使用const條款22: 盡量用“傳引用”而不用“傳值”條款23: 必須傳回一個對象時不要試圖傳回一個引用條款24: 在函數重載和設定參數預設值間慎重選擇條款25: 避免對指針和數字類型重載

繼續寫下去

effective c++的下載下傳位址http://download.csdn.net/detail/mlkiller/5335383

條款21: 盡可能使用const

這個條款的意思是,能使用const的地方,都要用const. 這個條款的好處是毋庸置疑的,const是c++裡面引入的,後來c語言裡面也有了,說明它确實很有用。

關于const的用途,這裡就不展開了。大概寫一下 1 常量         const int pi = 3.1416926 2  常量指針  (内容不能變,指針可以變)

int   q = 1;
     const int   *p = &q; //正确
           
p = π //正确;
     *p  = 2; //錯誤;
           

3  指針常量  (指針不能變,内容可以變)

int q1 = 1;
	int * const s = &q;
	*s = 2;//正确
	s = &q1;//錯誤
           

   關于2,3的說明和如何記憶:    *前面的 const修飾的都是*,表示内容不能變。  const int *p 和 int const *p等價。你可以這麼記憶, cosnt修飾*p,是以後面*p不能變。     *後面的const修飾的都是後面的指針變量,指針不能變。int * const p,是以這個指針一定要初始化,因為後面不能變了。  可以記憶為const 修飾p,  p不能變。

4指向常量的常量指針 (兩個都不能變)

     const int *p  const  p  = &q;

這些是個基本的用法,關于const比較詳細的用法,我後面專門寫一篇文章,來闡述。

  這條原則就是,設計的時候考慮,哪些變量,尤其是函數的參數,哪些不能變,需要考慮清楚,使用const防止代碼誤操作這些變量。

條款22: 盡量用“傳引用”而不用“傳值”

c 語言中沒有引用這個概念,因為引用實質上是指針的一種變異。 但是引用的好出呢?寫法比較舒服,文法簡單一些。

在c++中出現了類,是以在涉及到函數中有類的時候,最好用傳引用,而不是傳值。 兩個好處: 1 效率高,不會頻繁調用構造和析構函數 2 不會出現截斷現象,父類裡面的函數不會被截斷。 這個在google的程式設計規範裡面也有說明。

條款23: 必須傳回一個對象時不要試圖傳回一個引用

這個條款的意思是,怕人們看到既然引用那麼高效,那麼傳回值的時候會濫用引用。 引用必須有有對象的。 舉個例子,如果傳回值,就是函數參數裡面的對象,那麼使用引用就比較好了。 如果傳回值需要無中生有,必須内部使用指針new一個新的對象,然後傳回。但是這個時候,你需要提心吊膽的想着什麼時候釋放這個new出來的記憶體。 (建構在堆棧上的對象,函數結束的時候就消失了,用引用很危險)

這個時候就老老實實的傳回對象就可以了。

條款24: 在函數重載和設定參數預設值間慎重選擇

這個條款,主要是怕函數重載和預設直接由沖突。

一般來說,如果可以選擇一個合适的預設值并且隻是用到一種算法,就使用預設參數(參見條款38)。否則,就使用函數重載。

也就是說預設參數,多用于一些預設的參數設定的時候,大部分情況下都使用這些預設參數,有時候會改變。 例如計算中立,我們可以預設g=9.8,但是如果在别的星球,就需要改變,但是算法都是一樣的,不必要寫那麼多重載函數。

條款25: 避免對指針和數字類型重載

這個問題主要在于對于0到底是數組int 0 ,還是 指針 0,空指針。