static_cast, dynamic_cast, reinpreter_cast, const_cast的用法

轉(zhuǎn)自]《c++強(qiáng)制轉(zhuǎn)化》http://topic.csdn.net/t/20041127/15/3593843.html

  1. static_cast用法:static_cast < type-id > ( expression ) 該運(yùn)算符把expression轉(zhuǎn)換為type-id類型葬燎,但沒(méi)有運(yùn)行時(shí)類型檢查來(lái)保證轉(zhuǎn)換的安全性宅粥。它主要有如下幾種用法:①用于類層次結(jié)構(gòu)中基類和子類之間指針或引用的轉(zhuǎn)換。進(jìn)行上行轉(zhuǎn)換(把子類的指針或引用轉(zhuǎn)換成基類表示)是安全的;進(jìn)行下行轉(zhuǎn)換(把基類指針或引用轉(zhuǎn)換成子類表示)時(shí)祝辣,由于沒(méi)有動(dòng)態(tài)類型檢查,所以是不安全的凌盯。②用于基本數(shù)據(jù)類型之間的轉(zhuǎn)換徐矩,如把int轉(zhuǎn)換成char,把int轉(zhuǎn)換成enum窥淆。這種轉(zhuǎn)換的安全性也要開(kāi)發(fā)人員來(lái)保證卖宠。③把空指針轉(zhuǎn)換成目標(biāo)類型的空指針。④把任何類型的表達(dá)式轉(zhuǎn)換成void類型忧饭。
ui::Layout *addLine = static_cast<Layout*>(m_ligatureLine->clone());

注意:static_cast不能轉(zhuǎn)換掉expression的const扛伍、volitale、或者_(dá)_unaligned屬性词裤。

  1. dynamic_cast用法:dynamic_cast < type-id > ( expression )該運(yùn)算符把expression轉(zhuǎn)換成type-id類型的對(duì)象刺洒。Type-id必須是類的指針、類的引用或者void *吼砂;如果type-id是類指針類型逆航,那么expression也必須是一個(gè)指針,如果type-id是一個(gè)引用渔肩,那么expression也必須是一個(gè)引用因俐。dynamic_cast主要用于類層次間的上行轉(zhuǎn)換和下行轉(zhuǎn)換,還可以用于類之間的交叉轉(zhuǎn)換周偎。在類層次間進(jìn)行上行轉(zhuǎn)換時(shí)抹剩,dynamic_cast和static_cast的效果是一樣的;在進(jìn)行下行轉(zhuǎn)換時(shí)栏饮,dynamic_cast具有類型檢查的功能吧兔,比static_cast更安全。
    注意:這里要求派生類中要有虛擬函數(shù)袍嬉,否則編譯不能夠通過(guò)境蔼。而static_cast則無(wú)此要求。
m_map =dynamic_cast<ui::ScrollView *>(node->getChildByName("scroll_map"));
  1. reinpreter_cast用法:reinpreter_cast < type-id > ( expression )type-id必須是一個(gè)指針伺通、引用箍土、算術(shù)類型、函數(shù)指針或者成員指針罐监。它可以把一個(gè)指針轉(zhuǎn)換成一個(gè)整數(shù)吴藻,也可以把一個(gè)整數(shù)轉(zhuǎn)換成一個(gè)指針(先把一個(gè)指針轉(zhuǎn)換成一個(gè)整數(shù),再把該整數(shù)轉(zhuǎn)換成原類型的指針弓柱,還可以得到原先的指針值)沟堡。該運(yùn)算符的用法比較多侧但。
  2. const_cast用法:const_cast < type-id > ( expression )該運(yùn)算符用來(lái)修改類型的const或volatile屬性。除了const 或volatile修飾之外航罗, type_id和expression的類型是一樣的禀横。常量指針被轉(zhuǎn)化成非常量指針,并且仍然指向原來(lái)的對(duì)象粥血;常量引用被轉(zhuǎn)換成非常量引用柏锄,并且仍然指向原來(lái)的對(duì)象;常量對(duì)象被轉(zhuǎn)換成非常量對(duì)象复亏。dynamic_cast可用于繼承體系中的向下轉(zhuǎn)型趾娃,即將基類指針轉(zhuǎn)換為派生類指針,比static_cast更嚴(yán)格更安全缔御。dynamic_cast在執(zhí)行效率上比static_cast要差一些抬闷,但static_cast在更寬上范圍內(nèi)可以完成映射,這種不加限制的映射伴隨著不安全性耕突。static_cast覆蓋的變換類型除類層次的靜態(tài)導(dǎo)航以外饶氏,還包括無(wú)映射變換、窄化變換(這種變換會(huì)導(dǎo)致對(duì)象切片,丟失信息)有勾、用VOID*的強(qiáng)制變換、隱式類型變換等...
    ========================================== static_cast vs reinterpret_cast==========================================
    reinterpret_cast是為了映射到一個(gè)完全不同類型的意思古程,這個(gè)關(guān)鍵詞在我們需要把類型映射回原有類型時(shí)用到它蔼卡。我們映射到的類型僅僅是為了故弄玄虛和其他目的,這是所有映射中最危險(xiǎn)的挣磨。(這句話是C++編程思想中的原話) static_cast 和 reinterpret_cast 操作符修改了操作數(shù)類型雇逞。它們不是互逆的; static_cast 在編譯時(shí)使用類型信息執(zhí)行轉(zhuǎn)換茁裙,在轉(zhuǎn)換執(zhí)行必要的檢測(cè)(諸如指針越界計(jì)算, 類型檢查). 其操作數(shù)相對(duì)是安全的塘砸。另一方面;reinterpret_cast 僅僅是重新解釋了給出的對(duì)象的比特模型而沒(méi)有進(jìn)行二進(jìn)制轉(zhuǎn)換晤锥, 例子如下:int n=9; double d=static_cast < double > (n); 上面的例子中, 我們將一個(gè)變量從 int 轉(zhuǎn)換到 double掉蔬。 這些類型的二進(jìn)制表達(dá)式是不同的。 要將整數(shù) 9 轉(zhuǎn)換到 雙精度整數(shù) 9矾瘾,static_cast 需要正確地為雙精度整數(shù) d 補(bǔ)足比特位女轿。其結(jié)果為 9.0。而reinterpret_cast 的行為卻不同:
    int n=9; double d=reinterpret_cast (n);
    這次, 結(jié)果有所不同. 在進(jìn)行計(jì)算以后, d 包含無(wú)用值. 這是因?yàn)?reinterpret_cast 僅僅是復(fù)制 n 的比特位到 d, 沒(méi)有進(jìn)行必要的分析. 因此, 你需要謹(jǐn)慎使用 reinterpret_cast.
    原文鏈接:http://blog.csdn.net/hanchaoman/article/details/6104883
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壕翩,一起剝皮案震驚了整個(gè)濱河市蛉迹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌放妈,老刑警劉巖北救,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荐操,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡珍策,警方通過(guò)查閱死者的電腦和手機(jī)托启,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膛壹,“玉大人驾中,你說(shuō)我怎么就攤上這事∧A” “怎么了肩民?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)链方。 經(jīng)常有香客問(wèn)我持痰,道長(zhǎng),這世上最難降的妖魔是什么祟蚀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任工窍,我火速辦了婚禮,結(jié)果婚禮上前酿,老公的妹妹穿的比我還像新娘患雏。我一直安慰自己,他們只是感情好罢维,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布淹仑。 她就那樣靜靜地躺著,像睡著了一般肺孵。 火紅的嫁衣襯著肌膚如雪匀借。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天平窘,我揣著相機(jī)與錄音吓肋,去河邊找鬼。 笑死瑰艘,一個(gè)胖子當(dāng)著我的面吹牛是鬼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磅叛,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屑咳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了弊琴?” 一聲冷哼從身側(cè)響起兆龙,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后紫皇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體慰安,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年聪铺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了化焕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铃剔,死狀恐怖撒桨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情键兜,我是刑警寧澤凤类,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站普气,受9級(jí)特大地震影響谜疤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜现诀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一夷磕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仔沿,春花似錦坐桩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烘浦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萍鲸,已是汗流浹背闷叉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脊阴,地道東北人握侧。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嘿期,于是被迫代替她去往敵國(guó)和親品擎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • C++中的類型轉(zhuǎn)換分為兩種:隱式類型轉(zhuǎn)換秀菱;顯式類型轉(zhuǎn)換振诬。 而對(duì)于隱式變換,在很多時(shí)候衍菱,不經(jīng)意間就發(fā)生了赶么,比如int...
    DayDayUpppppp閱讀 14,555評(píng)論 6 26
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)脊串,斷路器辫呻,智...
    卡卡羅2017閱讀 134,660評(píng)論 18 139
  • 文章轉(zhuǎn)載自c的四種類型轉(zhuǎn)換 使用標(biāo)準(zhǔn)C++的類型轉(zhuǎn)換符:static_cast、dynamic_cast琼锋、rein...
    Yihulee閱讀 1,388評(píng)論 0 1
  • C++類型轉(zhuǎn)換總結(jié) 本章內(nèi)容:1 前言2 static_cast3 dynamic_cast4 const_cas...
    Haley_2013閱讀 952評(píng)論 0 50
  • 本文根據(jù)眾多互聯(lián)網(wǎng)博客內(nèi)容整理后形成放闺,引用內(nèi)容的版權(quán)歸原始作者所有,僅限于學(xué)習(xí)研究使用斩例,不得用于任何商業(yè)用途雄人。 首...
    深紅的眼眸閱讀 1,630評(píng)論 0 1