Effective C++ 第三條 Use const whenever possible

在任何可能的情況下使用const
const修飾函數(shù)參數(shù)
當(dāng)我們在傳入?yún)?shù)時(引用傳遞、指針傳遞),我們需要考慮該函數(shù)是否對傳入的對象進(jìn)行修改,如果不修改,則使用const修飾。這么做帶來的好處是如果在函數(shù)中誤操作對對象進(jìn)行了修改,編譯器會報錯提示,可以降低出錯的概率。
比如以下這個例子
const修飾成員函數(shù)
那么函數(shù)1和函數(shù)2的區(qū)別如下
講完了const的修飾的好處,const修飾也有壞處,比如在寫類的成員函數(shù)的時候一個功能要寫兩遍,一遍 const 型,一遍 non-const 型。為了解決這個問題,我們采用轉(zhuǎn)換來解決這個問題
可能看到這里會有些懵逼,但是我們一層一層拆解,//當(dāng)我們通過non-const對象調(diào)用[]重載的時候,我們想復(fù)用const的代碼,則我們先要把本non-const對象轉(zhuǎn)換為const對象,這就是最里層 static_cast<const Exam&>,然后通過static_cast<const Exam&> 調(diào)用 [] 重載,得到的結(jié)果是 const char&,然后將const char& 通過 const_cast<char&> 轉(zhuǎn)換為 char&,得到我們想要的結(jié)果。
const的辨析
//first const void* p; //second void* const p;
我們把 p 比作我們的手,而 *p 比作我們手指向的東西。
第一種是const修飾 *p,也就是說 p是不能改變的,而 p是可以改變的,也就是說 p 指向的內(nèi)容不能變,但是 p 本身的指向可以變。我手指向哪里哪里就不能變,但是我的手可以動。
*第二種const修飾的是 p ,p 不能改變,但是 p 可以改變,我的手不能動,但是手指向的東西可以變。