條款27 盡量少做轉型動作 146

2021-10-01 03:39:15 字數 571 閱讀 1339

這個在<>比較詳細地介紹了,現在重複一遍:

(1)const_cast通常被用來將物件的常量性轉除。它也是唯一有此能力的c+±style轉型操作符。

(2)dynamic_cast主要用來執行「安全想下轉型」,也就是用來決定某物件是否歸屬繼承體系中的某個型別。它是唯一無法由舊式語法執行的動作,也是唯一可能耗費重大執行成本的轉型動作。

(3)reinterpret_cast意圖執行低階轉型,實際動作可能取決於編譯器,這也就表示它不可移植。例如將乙個pointer to int轉型為乙個int。

(4)static_cast用來強迫隱式轉換,例如將non-const物件轉為const物件,或將int轉為double等等。它也可以用來執行上述多種轉換的反向轉換。

(1)如果可以,盡量避免轉型,特別是在注重效率的**中避免dynamic_cast。如果有個設計需要轉型動作,試著發展無需轉型的替代設計。

(2)如果轉型是必要的,試著將它隱藏於某個函式背後。客戶隨後可以呼叫該函式,而不需將轉型放進他們自己的**內。

(3)寧可使用c+±style(新式)轉型,不要使用舊式轉型。前者很容易辨識出來,而且也比較有著分門別類的職掌。

條款27 盡量少做轉型動作

c 中的轉型語法包括舊式轉型和新式轉型。舊式轉換包括 t expression 將expression轉型為t,c風格的轉型動作 t expression 將expression轉型為t,函式風格的轉型動作 新式轉型包括 const cast expression const cast通常被用來將物...

條款27 盡量少做轉型動作

c 的設計目標之一是保證 型別錯誤 絕不會發生。但轉型 cast 破壞了型別系統 type system 舊式轉型,c風格的轉型動作,如下 t tmp 將tmp轉型為t t tmp 同上,函式風格的轉型動作 c 提供四種新式轉型 new style或c style casts 1 const cas...

條款27 盡量少做轉型動作

在談及顯式轉換之前,先簡單說說隱式轉換。int ival 0 ival 3.541 3 doubl向int轉換會丟失精度,編譯器會警告 從double到int轉換可能會丟失資料,結果ival等於6整數3被轉換為double型別,然後執行浮點型別加法操作,得double型別結果6.541,然後將dou...