• <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>
            C++分析研究  
            C++
            日歷
            <2013年10月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789
            統計
            • 隨筆 - 92
            • 文章 - 4
            • 評論 - 4
            • 引用 - 0

            導航

            常用鏈接

            留言簿

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

              類型轉換在。我們編寫程序時是不可避免的,比如我們分配一個內存區域,它將要存儲的對象類型對編譯器是不可知的。最典型的例子就是void*指針,調用malloc時會返回一個void*,編譯器并不知道void*指向的對象類型。

              由此可見,類型轉換時不可以或缺的!下面我們介紹C++提供的4種顯示類型轉換,及繼承自C的類型轉換方式(Type)expression。本文的主要內容如下:

              寫在前面

              static_cast(exp)顯示轉換

              reinterpret_cast(exp)顯式轉換

              dynamic_cast(exp)顯示轉換

              const_cast(exp)顯示轉換

              總結

              1、寫在前面

              顯示類型轉換有時是必需的,如前面提到的void *指針。我們必須將malloc返回的void*指針顯示轉換為特定的類型,eg.:int * p=static_cast(malloc(100));還有如果我們想通過一個給定的十六進制數訪問內存。這大大方便了我們編程,但同時也帶來了風險,用得不好將成為很多錯誤的根源!如你通過一個十六進數去訪問內存可能會導致程序崩潰;如你內存轉換時可能會截斷原有數據…… www.liuhebao.com

              因此我們在類型轉換時必須得小心。

              2、static_cast(exp)顯示轉換

              static_cast類型轉換用于相關類型之間的轉換,諸如:在同一個類的繼承層次關系中,向上或向下轉換;枚舉類型與整數類型之間的轉換;浮點類型與指數類型之間的轉換。

              在這4中類型轉換中,static_cast是最接近C-style的了。

              3、reinterpret_cast(exp)顯式轉換

              字面理解即re-interpret,重新解析(釋)的意思。故名思意,它主要用于不相關類型之間的轉換,好一個英文單詞在不同的上下文中,詞性和詞義可能完全不同。它為不同類型之間轉換帶來的便利,但是也伴隨著風險的,如將一個十六進制整數轉換為內存地址(由int-->指針類型,這兩種類型完全不關聯)。既然是用于不相關類型之間的轉換,也就意味著編譯器不會做太多的確認和承諾。 www.yzyedu.com

              reinterpret_cast方式還有一個特點就是:目標和原始值之間至少有相同的位數,我們可以將轉換之后的值再轉換回去,而不像其它3種類型可能會導致精度丟失。

              4、dynamic_cast(exp)顯示轉換

              一種運行時(run-time)檢測的類型轉換,因此轉換可能需要較大的運行時代價,這種類型也是用C-style是無法實現的。主要用于執行類型向下轉換和繼承之間的轉換。

              5、const_cast(exp)顯示轉換

              用于消除變量的const限定,轉換之后的變量就不再具有“const”了,如果是一個const指針的話,轉換之后可以改變指向而指向其它對象。 www.yzjxsp.com

              6、總結

              用C-style的(Type)expression的格式轉換,可以用我們上面介紹的4種方式來替代。雖然中可以使用C-style的形式仍可用,但更加建議使用上面的4中類型。因為C-style的類型轉換更加危險:

              在一個大型程序中更難定位和識別

              哪種類型轉換并不明顯

              而用上面的四種方式可以更加準確地定位哪種類型轉換發生了錯誤。

            posted on 2011-03-21 00:50 HAOSOLA 閱讀(215) 評論(0)  編輯 收藏 引用
             
            Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
            PK10開獎 PK10開獎
            久久天堂AV综合合色蜜桃网| 少妇被又大又粗又爽毛片久久黑人 | 久久综合久久鬼色| 久久久久亚洲爆乳少妇无| 日本五月天婷久久网站| 国产精品一久久香蕉产线看| 久久久综合香蕉尹人综合网| 久久精品国产亚洲AV无码麻豆| 久久这里只精品国产99热| 色悠久久久久久久综合网| 精品久久久久久无码专区| 久久久这里有精品中文字幕| 久久精品无码专区免费东京热| 久久久99精品一区二区| 久久影院综合精品| 亚洲va久久久久| 国产精品久久久久乳精品爆| 精品国产乱码久久久久久郑州公司| 精品久久久久久国产牛牛app| 日韩精品久久久肉伦网站| 久久久久久久综合综合狠狠| 欧美久久综合性欧美| 久久婷婷五月综合国产尤物app | 欧美日韩精品久久久免费观看| 国产精品一久久香蕉国产线看观看| 欧美午夜精品久久久久久浪潮| 久久久久国产一级毛片高清版| 亚洲精品乱码久久久久久| 人人狠狠综合久久亚洲高清| 国产精品成人无码久久久久久 | 亚洲色婷婷综合久久| 人妻丰满?V无码久久不卡| 国产福利电影一区二区三区,免费久久久久久久精 | 久久无码中文字幕东京热| 久久久久国产| 久久精品亚洲精品国产欧美| 91亚洲国产成人久久精品网址| 99久久精品九九亚洲精品| 色综合久久综精品| 久久av高潮av无码av喷吹| 久久中文字幕无码专区|