最近忙著看書,但發(fā)覺記憶不是很好。看時明明白白的東西,一會就忘了。覺得還是記錄下來,好記性不如爛筆頭,減慢閱讀的速度,增加思考的時間。
More Effective C++之一 基礎(chǔ)議題
條款1:區(qū)分指針和引用
這個可以理解為:指針和引用有什么區(qū)別。
一是指針可以為空,而引用不能為空。
引用必須要指代某個對象。由于引用總是要指代一個對象,C++要求引用必須初始化。不存在空引用,則意味著引用比使用指針更高效。因為使用引用之前不需要測試它是否有效,而指針通常需要檢查其是否為空。
二是指針可以被重新賦值用以指向另外一個不同的對象,而引用總是指向初始化時它所指代的對象。
條款2:優(yōu)先考慮C++風(fēng)格的類型轉(zhuǎn)換
這個可以有兩個問題需要明白:一是C風(fēng)格的類型轉(zhuǎn)換有什么缺點;二是C++風(fēng)格的類型轉(zhuǎn)換的優(yōu)點。
首先我們來看C風(fēng)格類型轉(zhuǎn)換的缺點:
其一是可以通過它們在任意類型之間進行轉(zhuǎn)換。有些轉(zhuǎn)換差別很大,但C風(fēng)格的類型沒有做區(qū)分,行為有些粗魯。
其二是C風(fēng)格的類型轉(zhuǎn)換很難進行查找。
c++風(fēng)格的類型轉(zhuǎn)換:有4種類型轉(zhuǎn)換,分別是static_cast, const_cast, dynamic_cast和reinterpret_cast。
使用時應(yīng)寫成
static_cast<typde> (expression),其他同理。
static_cast 針對一種不涉及繼承的類型實施轉(zhuǎn)換,也不涉及const轉(zhuǎn)換的時候,就可以使用static_cast轉(zhuǎn)換。
const_cast用來去除掉一個表達式的const屬性或volatile屬性。強調(diào)的是通過這個轉(zhuǎn)換你要做的唯一一件事情就是改變某些東西的const屬性或者volatile屬性。目前為止,最通常的用法是去除掉一個對象的const屬性。
dynamic_cast,用來針對一個繼承體系做向下或者橫向的安全轉(zhuǎn)換。用dynamic_cast 把指向基類的指針(或引用)轉(zhuǎn)換成指向派生類或者基類的兄弟類的指針(或引用),而且同時可以知道轉(zhuǎn)換是否成功。空指針或者異常意味著失敗。
reinterpret_cast最常見的用法是用來在函數(shù)指針之間進行類型轉(zhuǎn)換。這種轉(zhuǎn)換常常是由(編譯器的)實現(xiàn)所定義的,致使reinterpret_cast幾乎不可移植。對函數(shù)指針實施類型轉(zhuǎn)換是不可移植的,而且在某些情況下會產(chǎn)生不正確的。
C++風(fēng)格的類型轉(zhuǎn)換的優(yōu)點:有確切的含義并容易識別,他們允許編譯器診斷類型轉(zhuǎn)換所產(chǎn)生的錯誤,不會使這些錯誤就在不知不覺的情況下被漏掉。
該上班了,其他待續(xù)。。。