C++的4种类型转换关键字及其特点
C++中有四種類(lèi)型轉(zhuǎn)換關(guān)鍵字,分別是reinterpret_cast,static_cast,const_cast,dynamic_cast.這是C++
為了減少?gòu)?qiáng)制轉(zhuǎn)換的副作用,并且在查錯(cuò)時(shí)使程序員能夠快速定位(總是最值得懷疑的)強(qiáng)制轉(zhuǎn)換,在標(biāo)準(zhǔn)C++中新增加了4個(gè)關(guān)鍵字*_cast,用來(lái)提倡一種全新的C++顯式轉(zhuǎn)換語(yǔ)法:
?_cast<type?id>(expression)
主要用在底層代碼中,實(shí)現(xiàn)任意指針之間的轉(zhuǎn)換和指針與整數(shù)之間的轉(zhuǎn)換,這是一種最有可能出問(wèn)題的最不安全的類(lèi)型轉(zhuǎn)換。只是在下面的情形,才需要使用這種類(lèi)型轉(zhuǎn)換:當(dāng)需要使用時(shí),所得到的東西已經(jīng)不同了,為了使它能夠用于原來(lái)的目的,必須再次把它轉(zhuǎn)換回來(lái)。例如:
使用reinterpret_cast通常是一種不明智且不方便的編程方式。但是在必須使用時(shí),它也是非常有用的。
2. static_cast
用于強(qiáng)制類(lèi)型隱式轉(zhuǎn)換,可以用于指針之間、引用之間或者基礎(chǔ)類(lèi)型之間的轉(zhuǎn)換。應(yīng)用到類(lèi)的指針上,意思是說(shuō)它允許子類(lèi)類(lèi)型的指針轉(zhuǎn)換為父類(lèi)類(lèi)型的指針(這是一個(gè)有效的隱式轉(zhuǎn)換)。
注意:被轉(zhuǎn)換的父類(lèi)沒(méi)有被檢查是否與目的類(lèi)型相一致。
代碼:
3、dynamic_cast
主要只用于對(duì)象的指針和引用。當(dāng)用于多態(tài)類(lèi)型時(shí),它允許任意的隱式類(lèi)型轉(zhuǎn)換以及相反過(guò)程。不過(guò),與static_cast不同,在后一種情況里(注:即隱式轉(zhuǎn)換的相反過(guò)程),dynamic_cast會(huì)檢查操作是否有效。也就是說(shuō),它會(huì)檢查轉(zhuǎn)換是否會(huì)返回一個(gè)被請(qǐng)求的有效的完整對(duì)象。檢測(cè)在運(yùn)行時(shí)進(jìn)行。如果被轉(zhuǎn)換的指針不是一個(gè)被請(qǐng)求的有效完整的對(duì)象指針,返回值為NULL.
通常用來(lái)執(zhí)行一種安全的向下類(lèi)型轉(zhuǎn)換(downcast)操作,用于在一個(gè)類(lèi)繼承層次上向下移動(dòng)。
因?yàn)槊總€(gè)派生類(lèi)的基類(lèi)都只有一個(gè),而且派生類(lèi)本身又包含了幾乎所有的基類(lèi)信息(private型的除外),所以向上的類(lèi)型轉(zhuǎn)換(upcast)總是唯一的和比較安全的(可以使用static_cast轉(zhuǎn)換)。
而一個(gè)基類(lèi)往往有多個(gè)派生類(lèi),而且派生類(lèi)中一般會(huì)在基類(lèi)的基礎(chǔ)上添加了一些特有的數(shù)據(jù)和操作,所以向下的類(lèi)型轉(zhuǎn)換總是多態(tài)的和不太安全的。
dynamic_cast提供了一種安全的向下類(lèi)型轉(zhuǎn)換操作,只有當(dāng)類(lèi)型轉(zhuǎn)換是正確的并且轉(zhuǎn)換取的成功,返回值才是所需要的指針;否則它將返回0(空指針NULL),表示不是正確的類(lèi)型。
4.const_cast
用來(lái)去除指針或者引用的常量性,即
const_cast (expression)
該運(yùn)算符用來(lái)修改類(lèi)型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類(lèi)型是一樣的。
一、常量指針被轉(zhuǎn)化成非常量的指針,并且仍然指向原來(lái)的對(duì)象;
二、常量引用被轉(zhuǎn)換成非常量的引用,并且仍然指向原來(lái)的對(duì)象;
在這四種強(qiáng)制轉(zhuǎn)換中,static_cast最常用(目前還沒(méi)有流行起來(lái),但是被標(biāo)準(zhǔn)C++著力提倡)、dynamic_cast最重要、const_cast也有用、而reinterpret_cast則很少被使用。
總結(jié)
以上是生活随笔為你收集整理的C++的4种类型转换关键字及其特点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt:windows下Qt安装教程
- 下一篇: C++ stringstream介绍,使