繼續寫下去
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,空指針。