• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            攀升·Uranus


            Something Different,Something New
            數(shù)據(jù)加載中……

            (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast)

            url: http://doserver.net/post/static_cast-const_cast-reinterpret_cast-dynamic_cast.php

            非常抱歉,謝謝郭老師的指正,我沒有認(rèn)真看這個文章就轉(zhuǎn)過來了,其實他的錯誤太多了,而且還是致命的,對大家不負(fù)責(zé)任了,請大家諒解!現(xiàn)在是修正版本,基本沒有錯誤了!如果覺得還有問題,請聯(lián)系我,謝謝你的關(guān)注!
            這篇文章其實并不是不才的原創(chuàng),本來打算自己寫的,但是通過baidu一下,發(fā)現(xiàn)有兄弟寫出來了,就干脆摘錄下來,供大家參考使用了!
            詳情請看:
            1. 標(biāo)準(zhǔn)c++中主要有四種強制轉(zhuǎn)換類型運算符:  
            2.   
            3. const_cast,reinterpret_cast,static_cast,dynamic_cast等等。  
            4.   
            5.   
            6.   
            7.   
            8. 1)static_cast<T*>(a)  
            9.   
            10. 將地址a轉(zhuǎn)換成類型T,T和a必須是指針、引用、算術(shù)類型或枚舉類型。  
            11.   
            12. 表達(dá)式static_cast<T*>(a), a的值轉(zhuǎn)換為模板中指定的類型T。在運行時轉(zhuǎn)換過程中,不進(jìn)行類型檢查來確保轉(zhuǎn)換的安全性。  
            13.   
            14.   
            15.   
            16.   
            17. 例子:  
            18.   
            19.   
            20.   
            21.   
            22. class B { ... };  
            23.   
            24. class D : public B { ... };  
            25.   
            26. void f(B* pb, D* pd)  
            27.   
            28. {  
            29.   
            30.    D* pd2 = static_cast<D*>(pb);        // 不安全, pb可能只是B的指針  
            31.   
            32.   
            33.   
            34.   
            35.    B* pb2 = static_cast<B*>(pd);        // 安全的  
            36.   
            37.    ...  
            38.   
            39. }  
            40.   
            41.   
            42.   
            43.   
            44.   
            45.   
            46.   
            47. class B { ... };  
            48.   
            49. class D : public B { ... };  
            50.   
            51. void f(B* pb, D* pd)  
            52.   
            53. {  
            54.   
            55.    D* pd2 = static_cast<D*>(pb);        // 不安全, pb可能只是B的指針  
            56.   
            57.   
            58.   
            59.   
            60.    B* pb2 = static_cast<B*>(pd);        // 安全的  
            61.   
            62.    ...  
            63.   
            64. }  
            65.   
            66.   
            67.   
            68.   
            69.   
            70.   
            71.   
            72. class B { ... };  
            73.   
            74. class D : public B { ... };  
            75.   
            76. void f(B* pb, D* pd)  
            77.   
            78. {  
            79.   
            80.    D* pd2 = static_cast<D*>(pb);        // 不安全, pb可能只是B的指針  
            81.   
            82.   
            83.   
            84.   
            85.    B* pb2 = static_cast<B*>(pd);        // 安全的  
            86.   
            87.    ...  
            88.   
            89. }  
            90.   
            91.   
            92.   
            93.   
            94. 2)dynamic_cast<T*>(a)  
            95.   
            96. 完成類層次結(jié)構(gòu)中的提升。T必須是一個指針、引用或無類型的指針。a必須是決定一個指針或引用的表達(dá)式。  
            97.   
            98. 表達(dá)式dynamic_cast<T*>(a) 將a值轉(zhuǎn)換為類型為T的對象指針。如果類型T不是a的某個基類型,該操作將返回一個空指針。  
            99.   
            100.   
            101.   
            102.   
            103. 例子:  
            104.   
            105. class A { ... };  
            106.   
            107. class B { ... };  
            108.   
            109. void f()  
            110.   
            111. {  
            112.   
            113.   A* pa = new A;  
            114.   
            115.   B* pb = new B;  
            116.   
            117.   void* pv = dynamic_cast<A*>(pa);  
            118.   
            119.   // pv 現(xiàn)在指向了一個類型為A的對象  
            120.   
            121.   ...  
            122.   
            123.   pv = dynamic_cast<B*>(pb);  
            124.   
            125.   // pv 現(xiàn)在指向了一個類型為B的對象  
            126.   
            127. }  
            128.   
            129.   
            130.   
            131.   
            132. 3)const_cast<T*>(a)  
            133.   
            134. 去掉類型中的常量,除了const或不穩(wěn)定的變址數(shù),T和a必須是相同的類型。  
            135.   
            136. 表達(dá)式const_cast<T*>(a)被用于從一個類中去除以下這些屬性:const, volatile, 和 __unaligned。  
            137.   
            138.   
            139.   
            140.   
            141. 例子:  
            142.   
            143.   
            144.   
            145.   
            146.   
            147.   
            148.   
            149. class A { ... };  
            150.   
            151. void f()  
            152.   
            153. {  
            154.   
            155.  const A *pa = new A;//const對象  
            156.   
            157.  A *pb;//非const對象  
            158.   
            159.   
            160.   
            161.   
            162. //pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象  
            163.   
            164.  pb = const_cast<A*>(pa); // 現(xiàn)在OK了  
            165.   
            166. ...  
            167.   
            168. }  
            169.   
            170.   
            171.   
            172.   
            173.   
            174.   
            175.   
            176. class A { ... };  
            177.   
            178. void f()  
            179.   
            180. {  
            181.   
            182.  const A *pa = new A;//const對象  
            183.   
            184.  A *pb;//非const對象  
            185.   
            186.   
            187.   
            188.   
            189. //pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象  
            190.   
            191.  pb = const_cast<A*>(pa); // 現(xiàn)在OK了  
            192.   
            193. ...  
            194.   
            195. }  
            196.   
            197.   
            198.   
            199.   
            200.   
            201.   
            202.   
            203. class A { ... };  
            204.   
            205. void f()  
            206.   
            207. {  
            208.   
            209.  const A *pa = new A;//const對象  
            210.   
            211.  A *pb;//非const對象  
            212.   
            213.   
            214.   
            215.   
            216. //pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象  
            217.   
            218.  pb = const_cast<A*>(pa); // 現(xiàn)在OK了  
            219.   
            220. ...  
            221.   
            222. }  
            223.   
            224.   
            225.   
            226.   
            227. 4)reinterpret_cast<T*>(a)  
            228.   
            229. 任何指針都可以轉(zhuǎn)換成其它類型的指針,T必須是一個指針、引用、算術(shù)類型、指向函數(shù)的指針或指向一個類成員的指針。  
            230.   
            231. 表達(dá)式reinterpret_cast<T*>(a)能夠用于諸如char* 到 int*,或者One_class* 到 Unrelated_class*等類似這樣的轉(zhuǎn)換,因此可能是不安全的。  
            232.   
            233.   
            234.   
            235.   
            236. 例子:  
            237.   
            238. class A { ... };  
            239.   
            240. class B { ... };  
            241.   
            242. void f()  
            243.   
            244. {  
            245.   
            246.   A* pa = new A;  
            247.   
            248.   void* pv = reinterpret_cast<A*>(pa);  
            249.   
            250.   // pv 現(xiàn)在指向了一個類型為B的對象,這可能是不安全的  
            251.   
            252.   ...  
            253.   


            posted on 2009-06-22 11:24 攀升 閱讀(3812) 評論(6)  編輯 收藏 引用 所屬分類: C/C++

            評論

            # re: (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast) [未登錄]  回復(fù)  更多評論   

            Thinking in C++ 第二卷里面也有詳細(xì)闡述。Uranus同志,把我的網(wǎng)站加入你的圈子啊,哈哈。
            2009-07-06 12:30 | Tim

            # re: (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast)   回復(fù)  更多評論   

            @Tim
            現(xiàn)在公司項目很緊,每天加班
            那天我在給steven說,如果你在的話,我們就無敵了,
            無敵三人組呀,因為我們年齡,愛好和思想接近
            有點懷念那個時候的我們了!!!
            2009-07-11 16:00 | 攀升

            # re: (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast)   回復(fù)  更多評論   

            Thinking in C++ 第二卷里面也有詳細(xì)闡述
            我找找看
            2009-07-11 18:41 | 99網(wǎng)上書城

            # re: (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast) [未登錄]  回復(fù)  更多評論   

            @攀升
            唉,命運弄人。
            看著你和Steven我羨慕啊,公司里面有這么強大的板子讓你們搞Andriod。
            想想要是我們?nèi)诠敬龓啄辏约撼鰜黹_公司肯定沒問題了。
            2009-07-12 16:39 | Tim

            # re: (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast)   回復(fù)  更多評論   

            @Tim
            別這么說,
            你一定要保證一個好的心態(tài),好好養(yǎng),
            下次來上海了一定要喊我,我們一起敘敘。
            2009-07-12 20:52 | 攀升

            # re: (轉(zhuǎn)) 總結(jié)C++中的所有強制轉(zhuǎn)換函數(shù)(const_cast,reinterpret_cast,static_cast,dynamic_cast) [未登錄]  回復(fù)  更多評論   

            @攀升
            感謝感謝,將來肯定還來上海和你們懷舊的。
            我把你博客加到我網(wǎng)站的鏈接上了,鏈接描述我寫的”完顏阿骨打怎么也沒想到他的后代居然搞了IT“,哈哈
            2009-07-15 13:29 | Tim
            欧美亚洲日本久久精品| 久久精品人人做人人爽电影蜜月| 香蕉久久一区二区不卡无毒影院| 精品国产91久久久久久久a| 亚洲精品无码专区久久同性男| 人妻精品久久无码区| 久久www免费人成精品香蕉| 久久综合亚洲欧美成人| 久久国产高清一区二区三区| 久久久无码人妻精品无码| 久久久久久av无码免费看大片| 久久久精品人妻一区二区三区四| 久久午夜福利电影| 久久亚洲国产欧洲精品一| 精品免费久久久久久久| 狠狠色丁香久久婷婷综合| 久久久无码精品亚洲日韩软件| 高清免费久久午夜精品| 日韩久久久久久中文人妻 | 成人久久久观看免费毛片| 久久亚洲精品国产亚洲老地址| 97精品伊人久久久大香线蕉| 99国产精品久久| 久久99国产精品二区不卡| 久久久精品国产sm调教网站| 欧洲人妻丰满av无码久久不卡| 精品国产日韩久久亚洲| 2021最新久久久视精品爱| 亚洲国产成人久久笫一页| 青青久久精品国产免费看| 日韩欧美亚洲综合久久影院Ds | 天堂久久天堂AV色综合| 亚洲国产精品无码久久一线| 亚洲精品无码久久久久久| 久久亚洲精品成人av无码网站| 久久AV高清无码| 丰满少妇人妻久久久久久4| 精品久久久久中文字| 亚洲国产精品综合久久网络| 久久精品国产免费观看三人同眠| 久久婷婷五月综合色高清|