<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C++ 靜態類型轉換和動態類型轉換的區別

      1. 靜態類型轉換(static_cast

        • 概念
          • static_cast是C++中的一種類型轉換操作符,用于在編譯時進行類型轉換。它主要用于具有明確的、編譯器可以在編譯階段確定的類型轉換關系的情況。這種轉換通常在相關類型之間進行,例如基本數據類型之間的轉換,或者在類層次結構中的向上轉換(將派生類指針或引用轉換為基類指針或引用)。
        • 例子
          • 基本數據類型轉換
            • int類型轉換為double類型:
              int numInt = 5;
              double numDouble = static_cast<double>(numInt);
              
            • double類型轉換為int類型(會截斷小數部分):
              double numDouble = 3.14;
              int numInt = static_cast<int>(numDouble);
              
          • 類層次結構中的向上轉換
            • 假設有基類Base和派生類Derived
              class Base {};
              class Derived : public Base {};
              Derived d;
              Base* b = static_cast<Base*>(&d);
              
        • 特點
          • 編譯器在編譯時進行檢查,如果轉換不合法(例如轉換沒有意義或者不符合類型轉換規則),會產生編譯錯誤。
          • 對于基本數據類型,它執行的轉換類似于隱式類型轉換,但更加明確。對于類類型的轉換,它不會進行運行時的類型檢查,只是簡單地進行類型調整。
      2. 動態類型轉換(dynamic_cast

        • 概念
          • dynamic_cast也是C++中的一種類型轉換操作符,主要用于在類的層次結構中進行安全的向下轉換(將基類指針或引用轉換為派生類指針或引用)。與static_cast不同的是,dynamic_cast在運行時進行類型檢查,以確保轉換的安全性。
        • 例子
          • 假設有基類Base(包含至少一個虛函數以支持運行時多態)和派生類Derived
            class Base { virtual void f() {} };
            class Derived : public Base {};
            Base* b = new Derived();
            Derived* d = dynamic_cast<Derived*>(b);
            if (d!= nullptr) {
                // 轉換成功,可以安全使用d
            } else {
                // 轉換失敗
            }
            
            • 如果將基類指針實際指向的是基類對象而不是派生類對象,那么dynamic_cast會返回nullptr(對于指針類型)。如果是引用類型的轉換失敗,則會拋出std::bad_cast異常。例如:
              Base* b = new Base();
              Derived* d = dynamic_cast<Derived*>(b);
              if (d == nullptr) {
                  std::cout << "Conversion failed." << std::endl;
              }
              
        • 特點
          • 運行時類型檢查增加了程序的安全性,確保在轉換時對象的實際類型與轉換目標類型相匹配。
          • 由于需要在運行時進行類型檢查,會帶來一定的性能開銷。這種開銷主要是因為它需要在對象的虛函數表(vtable)中查找類型信息。
      3. 區別

        • 檢查時間
          • static_cast在編譯時進行類型檢查,而dynamic_cast在運行時進行類型檢查。
        • 安全性
          • static_cast在進行類層次結構的轉換時,不進行運行時的類型驗證,可能會導致不安全的轉換。例如,將一個基類指針錯誤地轉換為派生類指針,可能會在后續使用中引發未定義行為。dynamic_cast則通過運行時檢查確保轉換的安全性。
        • 使用場景
          • static_cast適用于編譯器能夠在編譯階段確定轉換合法性的情況,如基本數據類型轉換和類層次結構中的向上轉換(這種轉換通常是安全的,因為派生類對象可以被看作是基類對象的一種特殊情況)。dynamic_cast主要用于在類層次結構中進行向下轉換,并且需要在運行時確保轉換的正確性。
        • 性能
          • 由于dynamic_cast需要在運行時進行類型檢查,涉及到虛函數表的查詢等操作,所以會有一定的性能開銷。而static_cast在編譯時就完成了轉換操作,沒有運行時的額外開銷。
      posted @ 2024-10-05 21:13  西北野狼  閱讀(161)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 十八禁国产一区二区三区| 日韩丝袜欧美人妻制服| 亚洲性色AV一区二区三区| 中国老熟妇自拍hd发布| 国产一区二区日韩在线| 国产欧美日韩精品丝袜高跟鞋| 精品国产欧美一区二区五十路| 久久精品国产蜜臀av| 开心婷婷五月激情综合社区| 人妻无码| 精品久久久久久无码不卡| 97视频精品全国免费观看| 麻豆aⅴ精品无码一区二区| 国产成人99亚洲综合精品| 精选国产av精选一区二区三区| 少妇特黄a一区二区三区| 久久亚洲精品11p| 在线天堂最新版资源| 99久久er热在这里只有精品99| 好吊视频专区一区二区三区| 国产成人高清在线观看视频| 乐山市| 国产精品白丝一区二区三区| 国产成人A在线视频免费| 山阴县| 人妻教师痴汉电车波多野结衣| 东京热人妻无码一区二区AV| 中文字幕国产精品自拍| 国产精品日韩av在线播放| 免费高潮了好湿h视频| 亚洲色大成网站WWW久久| 色一情一乱一区二区三区码| 亚洲欧美一区二区成人片| 三级国产在线观看| 国产尤物精品自在拍视频首页| 欧美成人精品高清在线播放| 日韩视频中文字幕精品偷拍| 亚洲国产精品综合久久网各| 久久成人国产精品免费软件| 无遮高潮国产免费观看| 日本狂喷奶水在线播放212|