<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [C++為什么非要引入那幾種類型轉換?](https://mp.weixin.qq.com/s/6YW7VX787X7kZiRBLbVn-Q) ***** 眾所周知C++關于類型轉換引入了**四種**方式: static\_cast const\_cast dynamic\_cast reinterpret\_cast 1. 為什么要引入這幾種類型轉換,它與C語言中的強制類型轉換有什么區別? 2. 這四種類型轉換分別應用在什么場景? ## C++為什么要引入這幾種強制類型轉換? 我們都知道C++完全兼容C語言,C語言的轉換方式很簡單,可以在任意類型之間轉換,但這也恰恰是缺點,因為極其不安全,可能不經意間將指向const對象的指針轉換成非const對象的指針,可能將基類對象指針轉成了派生類對象的指針,這種轉換很容易出bug,需要嚴格審查代碼才能消除這種隱患,但是C這種轉換方式不利于我們審查代碼,且程序運行時也可能會出bug。 而C++引入的這幾種類型轉換可以完美的解決上述問題,不同場景下不同需求使用不同的類型轉換方式,同時有利于代碼審查。 下面詳細介紹這四種類型轉換的使用場景: **static\_cast** 使用方式: ~~~ #include <iostream> ~~~ **使用場景**:基本數據類型之間的轉換使用,例如float轉int,int轉char等,在有類型指針和void\*之間轉換使用,子類對象指針轉換成父類對象指針也可以使用static\_cast。 非多態類型轉換一般都使用static\_cast,而且最好把所有的隱式類型轉換都是用static\_cast進行顯示替換,不能使用static\_cast在有類型指針之間進行類型轉換。 **dynamic\_cast** ### 使用方式: ~~~ #include <iostream> ~~~ **使用場景**:用于將父類的指針或引用轉換為子類的指針或引用,此場景下父類必須要有虛函數,因為dynamic\_cast是運行時檢查,檢查需要運行時信息RTTI,而RTTI存儲在虛函數表中,關于虛函數表具體可以看我的這篇文章:[面試系列之C++的*對象*布局](http://mp.weixin.qq.com/s?__biz=MzI3NjA1OTEzMg==&mid=2247484213&idx=1&sn=dc75ae10a8ef2cf6188fe982076e7ea8&chksm=eb7a05a6dc0d8cb0394a43cb0cebe4f454eaf53bb353087d8d3ac7b08c2948edb3fc62172237&scene=21#wechat_redirect) **const\_cast** 使用方式: ~~~ int main() { ~~~ **使用場景**:用于常量指針或引用與非常量指針或引用之間的轉換,只有const\_cast才可以對常量進行操作,一般都是用它來去除常量性,去除常量性是危險操作,還是要謹慎操作。 **reinterpret\_cast** 使用方式: ~~~ int main() { ~~~ **使用場景**:沒啥場景,類似C語言中的強制類型轉換,什么都可以轉,萬不得已不要使用,一般前三種轉換方式不能解決問題了使用這種強制類型轉換方式
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看