《Effective C++》里面第3條原則是盡量使用const休蟹。
其原因是防止無意中更改而本來不應(yīng)該更改的變量幕侠。
本條款也提到const成員函數(shù)的重要性油挥,原因之一就是只有const函數(shù)才能用來操縱const對象顾患。
而所謂const對象就像下圖所示的這樣:
有的時候會遇到在const函數(shù)中更改非const成員變量的情況,這個時候就要用到mutable關(guān)鍵字了用踩。如果一個成員變量被mutable修飾渠退,那么它在const函數(shù)中仍然可以被修改,但是前提是該成員變量是非const成員脐彩。
還有一種情況就是為了防止代碼重復(fù)智什,比如兩個函數(shù)實現(xiàn)了同樣的功能只是類型不同而已,這樣就會導(dǎo)致兩段幾乎相同的代碼段丁屎,這無疑會增加編譯時間、維護和代碼膨脹等風險旱眯。在本原則的有關(guān)敘述中晨川,作者采用了強制類型轉(zhuǎn)換來解決之,雖然作者本身在大多數(shù)情況下并不提倡做法删豺。
為了給用戶一個一目了然的接口共虑,一看就知道那些成員函數(shù)可以操縱const對象而哪些不能,作者建議在類中明確將那些不改變對象的成員函數(shù)聲明為const函數(shù)呀页,雖然const成員函數(shù)可以使用非const成員變量妈拌,但是遵守這一原則會給客戶帶來極大的便利。
因為const成員函數(shù)不更改對象蓬蝶,這就防止了由于誤操作而帶來的問題尘分,因為最好用非const成員函數(shù)去調(diào)用const的實現(xiàn),說白了就是直接return這個const成員函數(shù)丸氛,只不過需要對作為這個return的表達式的const成員函數(shù)進行一下強制類型轉(zhuǎn)換使其成為非const型的培愁。所以,在這里不得不提一下純粹的C++的強制類型轉(zhuǎn)換缓窜。
關(guān)鍵在static_cast<typename>(value)是純粹的C++強制類型轉(zhuǎn)換的關(guān)鍵詞和用法定续,它的使用頻率是最高的谍咆。
const_cast<typename>(value)是用來消除const屬性時用的。不過它不能用于基本類型私股。
reinterpret_cast<typename>(value)它用于無關(guān)類型之間的轉(zhuǎn)換摹察。
dynamic_cast<typename>(value)用于父子類指針之間的轉(zhuǎn)換。
在C++語言中只有這4中強制類型轉(zhuǎn)換倡鲸。