類型轉(zhuǎn)換:
static_cast
static_cast:static_cast < type-id > ( expression )
該運算符把expression轉(zhuǎn)換為type-id類型弛针,但沒有運行時類型檢查來保證轉(zhuǎn)換的安全性展运。
情況1:void指針->其他類型指針
情況2:改變通常的標準轉(zhuǎn)換
情況3:避免出現(xiàn)可能多種轉(zhuǎn)換的歧義
它主要有如下幾種用法:
用于類層次結(jié)構(gòu)中基類和子類之間指針或引用的轉(zhuǎn)換登疗。進行上行轉(zhuǎn)換(把子類的指針或引用轉(zhuǎn)換成基類表示)是安全的搀菩;進行下行轉(zhuǎn)換(把基類指針或引用轉(zhuǎn)換成子類指針或引用)時倍奢,由于沒有動態(tài)類型檢查鲁冯,所以是不安全的鹦筹。
用于基本數(shù)據(jù)類型之間的轉(zhuǎn)換介衔,如把int轉(zhuǎn)換成char,把int轉(zhuǎn)換成enum脚翘。這種轉(zhuǎn)換的安全性也要開發(fā)人員來保證灼卢。
把void指針轉(zhuǎn)換成目標類型的指針(不安全!!)
把任何類型的表達式轉(zhuǎn)換成void類型。
dynamic_cast
dynamic_cast:dynamic_cast < type-id > ( expression )
該運算符把expression轉(zhuǎn)換成type-id類型的對象来农。Type-id必須是類的指針鞋真、類的引用或者void *;如果type-id是類指針類型沃于,那么expression也必須是一個指針涩咖,如果type-id是一個引用,那么expression也必須是一個引用繁莹。當無法使用virtual函數(shù)的時候,必須使用dynamic_cast進行轉(zhuǎn)換
dynamic_cast主要用于類層次間的上行轉(zhuǎn)換和下行轉(zhuǎn)換檩互,還可以用于類之間的交叉轉(zhuǎn)換。
在類層次間進行上行轉(zhuǎn)換時蒋困,dynamic_cast和static_cast的效果是一樣的盾似;在進行下行轉(zhuǎn)換時,dynamic_cast具有類型檢查的功能雪标,比static_cast更安全零院。
reinpreter_cast
reinpreter_cast:reinpreter_cast<type-id> (expression)
type-id必須是一個指針、引用村刨、算術(shù)類型告抄、函數(shù)指針或者成員指針。它可以把一個指針轉(zhuǎn)換成一個整數(shù)嵌牺,也可以把一個整數(shù)轉(zhuǎn)換成一個指針(先把一個指針轉(zhuǎn)換成一個整數(shù)打洼,在把該整數(shù)轉(zhuǎn)換成原類型的指針龄糊,還可以得到原先的指針值)。
const_cast
const_cast:const_cast<type_id> (expression)
該運算符用來修改類型的const或volatile屬性募疮。除了const 或volatile修飾之外炫惩, type_id和expression的類型是一樣的。
常量指針被轉(zhuǎn)化成非常量指針阿浓,并且仍然指向原來的對象他嚷;常量引用被轉(zhuǎn)換成非常量引用,并且仍然指向原來的對象芭毙;常量對象被轉(zhuǎn)換成非常量對象筋蓖。