青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

(轉載)使用標準C++的類型轉換符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。

(原文)http://hi.baidu.com/%B0%C2%C0%FB%B8%A5/blog/item/1b2b9d941e98451fd21b7014.html


1 static_cast

用法:static_cast < type-id > ( expression )     
該運算符把expression轉換為type-id類型,但沒有運行時類型檢查來保證轉換的安全性。它主要有如下幾種用法:
①用于類層次結構中基類和子類之間指針或引用的轉換。
進行上行轉換(把子類的指針或引用轉換成基類表示)是安全的;
進行下行轉換(把基類指針或引用轉換成子類表示)時,由于沒有動態類型檢查,所以是不安全的。
②用于基本數據類型之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。
③把空指針轉換成目標類型的空指針。
④把任何類型的表達式轉換成void類型。

注意:static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。


2  dynamic_cast
用法:dynamic_cast < type-id > ( expression )
該運算符把expression轉換成type-id類型的對象。Type-id必須是類的指針、類的引用或者void *;
如果type-id是類指針類型,那么expression也必須是一個指針,如果type-id是一個引用,那么expression也必須是一個引用。

dynamic_cast主要用于類層次間的上行轉換和下行轉換,還可以用于類之間的交叉轉換。
在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;
在進行下行轉換時,dynamic_cast具有類型檢查的功能,比static_cast更安全。

 1 class B{
 2 public:
 3        int m_iNum;
 4        virtual void foo();
 5 };
 6 
 7 class D:public B{
 8     public:
 9        char *m_szName[100];
10 };
11 
12 void func(B *pb){
13     D *pd1 = static_cast<*>(pb);
14     D *pd2 = dynamic_cast<*>(pb);
15 }

在上面的代碼段中,如果pb指向一個D類型的對象,pd1和pd2是一樣的,并且對這兩個指針執行D類型的任何操作都是安全的;
但是,如果pb指向的是一個B類型的對象,那么pd1將是一個指向該對象的指針,對它進行D類型的操作將是不安全的(如訪問m_szName),
而pd2將是一個空指針。

另外要注意:B要有虛函數,否則會編譯出錯;static_cast則沒有這個限制。
這是由于運行時類型檢查需要運行時類型信息,而這個信息存儲在類的虛函數表(
關于虛函數表的概念,詳細可見<Inside c++ object model>)中,只有定義了虛函數的類才有虛函數表,
沒有定義虛函數的類是沒有虛函數表的。

另外,dynamic_cast還支持交叉轉換(cross cast)。如下代碼所示。

 1 class A{
 2 public:
 3         int m_iNum;
 4         virtual void f(){}
 5 };
 6 
 7 class B:public A{
 8 };
 9 
10 class D:public A{
11 };
12 
13 void foo(){
14     B *pb = new B;
15     pb->m_iNum = 100;
16 
17     D *pd1 = static_cast<*>(pb);    //compile error
18     D *pd2 = dynamic_cast<*>(pb);  //pd2 is NULL
19     delete pb;
20 }

在函數foo中,使用static_cast進行轉換是不被允許的,將在編譯時出錯;而使用 dynamic_cast的轉換則是允許的,結果是空指針。


3  reinpreter_cast
用法:reinpreter_cast<type-id> (expression)
type-id必須是一個指針、引用、算術類型、函數指針或者成員指針。
它可以把一個指針轉換成一個整數,也可以把一個整數轉換成一個指針(先把一個指針轉換成一個整數,
在把該整數轉換成原類型的指針,還可以得到原先的指針值)。

該運算符的用法比較多。

4  const_cast
用法:const_cast<type_id> (expression)
該運算符用來修改類型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類型是一樣的。
常量指針被轉化成非常量指針,并且仍然指向原來的對象;
常量引用被轉換成非常量引用,并且仍然指向原來的對象;常量對象被轉換成非常量對象。

Voiatile和const類試。舉如下一例:

 1 class B{
 2 public:
 3      int m_iNum;
 4 }
 5 void foo(){
 6  const B b1;
 7  b1.m_iNum = 100;            //comile error
 8  B b2 = const_cast<B>(b1);
 9  b2. m_iNum = 200;           //fine
10 }

上面的代碼編譯時會報錯,因為b1是一個常量對象,不能對它進行改變;
使用const_cast把它轉換成一個常量對象,就可以對它的數據成員任意改變。注意:b1和b2是兩個不同的對象。

 


posted on 2007-06-20 16:51 迷宮の未來 閱讀(427) 評論(0)  編輯 收藏 引用

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿(10)

隨筆檔案

文章檔案

最新隨筆

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            性色一区二区| 亚洲三级免费电影| 久久aⅴ国产紧身牛仔裤| 亚洲一二三区精品| 国产精品外国| 久久精品国产欧美激情| 欧美一区二区三区四区高清| 国内揄拍国内精品久久| 免费av成人在线| 欧美二区乱c少妇| 中国亚洲黄色| 亚洲免费视频一区二区| 国产三级欧美三级| 欧美成人精品在线播放| 欧美精品18| 亚洲欧美中文日韩在线| 欧美在线一二三| 亚洲电影在线观看| 99视频一区二区| 欧美三级电影一区| 欧美一级淫片播放口| 欧美综合77777色婷婷| 亚洲国产精品第一区二区| 亚洲裸体俱乐部裸体舞表演av| 国产精品久久久久久久久久免费看 | 久久国产婷婷国产香蕉| 亚洲欧洲综合| 亚洲综合欧美日韩| 激情久久久久久久| 99视频在线观看一区三区| 韩国欧美一区| 99国产精品视频免费观看一公开| 国产综合色产| 亚洲美女免费精品视频在线观看| 国产精品一区二区你懂得| 麻豆国产精品777777在线| 国产精品福利久久久| 欧美成人免费在线视频| 国产精品三区www17con| 亚洲人成人99网站| 在线观看日韩av电影| 亚洲午夜视频在线| 亚洲欧洲偷拍精品| 久久久免费av| 久久久国产精品一区| 欧美日韩妖精视频| 亚洲国产精品福利| 精品二区久久| 欧美在线91| 午夜亚洲福利| 国产精品久久久久久久app| 亚洲日本久久| 亚洲全部视频| 美女黄毛**国产精品啪啪| 久久精品亚洲精品国产欧美kt∨| 欧美激情导航| 一本色道久久综合狠狠躁的推荐| 久久午夜av| 久久精品五月| 国产精品萝li| 亚洲精品一区二区三区福利| 国产一区视频观看| 亚洲一区二区不卡免费| 精品av久久707| 久久精品国产一区二区三| 亚洲视频在线免费观看| 牛夜精品久久久久久久99黑人 | 免费日韩av| 国产一区二区三区高清播放| 正在播放亚洲一区| 99亚洲精品| 欧美大片在线观看一区| 美女主播一区| 激情久久一区| 久久se精品一区精品二区| 性色av一区二区三区| 久久视频在线看| 久久婷婷国产综合国色天香| 美女福利精品视频| 国产亚洲成人一区| 亚洲一区二区三区在线播放| 亚洲免费影视| 欧美精品久久99| 99re66热这里只有精品4| 日韩视频一区| 欧美激情视频网站| 亚洲国产精品第一区二区三区| 亚洲日本精品国产第一区| 免费看av成人| 女主播福利一区| 亚洲精品婷婷| 欧美日韩国产美女| 一区二区三区|亚洲午夜| 亚洲一区综合| 国产精品视频1区| 欧美一区激情| 另类欧美日韩国产在线| 在线视频观看日韩| 久久综合精品一区| 亚洲欧洲另类国产综合| 一本大道久久精品懂色aⅴ| 欧美无乱码久久久免费午夜一区| 夜夜嗨一区二区| 欧美一级片一区| 精东粉嫩av免费一区二区三区| 一区二区三区回区在观看免费视频| 国产精品99久久久久久有的能看| 国产精品白丝jk黑袜喷水| 欧美在线看片| 亚洲电影毛片| 欧美一区二区三区免费观看视频| 国产伦精品一区二区三| 久久亚洲精品伦理| 99国产精品99久久久久久| 一区二区三区 在线观看视频| 国产精品福利网站| 久久婷婷国产综合精品青草| 日韩亚洲欧美一区| 久久野战av| 亚洲午夜极品| 亚洲大胆人体视频| 国产精品毛片a∨一区二区三区|国| 久久成人精品| 99亚洲精品| 欧美大尺度在线观看| 亚洲欧美国产精品桃花| 亚洲福利视频免费观看| 免费日本视频一区| 亚洲伊人观看| 亚洲日韩视频| 久久在线免费| 欧美亚洲在线| 99爱精品视频| 樱桃成人精品视频在线播放| 牛牛影视久久网| 女人色偷偷aa久久天堂| 午夜精品在线视频| 99国产一区| 亚洲电影免费| 免费亚洲一区二区| 久久国产88| 亚洲美女在线观看| 亚洲精品免费在线| 黄色成人免费网站| 国产伦精品一区二区三| 欧美午夜在线| 欧美久久视频| 欧美高清在线精品一区| 香蕉久久一区二区不卡无毒影院 | 国产精品一区二区你懂得| 亚洲一区久久| 亚洲美女视频在线观看| 亚洲成在人线av| 裸体女人亚洲精品一区| 一区二区免费在线观看| 在线观看日产精品| 伊人伊人伊人久久| 在线免费高清一区二区三区| 国产一区二区三区在线播放免费观看 | 亚洲一级影院| 亚洲欧美精品suv| 91久久在线播放| 又紧又大又爽精品一区二区| 国产精品一区二区三区乱码| 欧美日韩精品系列| 欧美日韩亚洲激情| 欧美午夜欧美| 国产精品三级视频| 欧美日韩另类字幕中文| 国产精品亚洲а∨天堂免在线| 国产精品久久久久久久久免费桃花| 国产精品久久久久久久久果冻传媒 | 久久本道综合色狠狠五月| 午夜精品久久久久99热蜜桃导演| 亚洲自拍偷拍网址| 久久精品国产v日韩v亚洲| 久久一区二区精品| 欧美激情亚洲国产| 亚洲精品乱码久久久久久久久| 亚洲国产精品悠悠久久琪琪| 亚洲精品一区二区三区福利| 在线亚洲精品| 欧美在线观看视频一区二区三区| 久久久久国产成人精品亚洲午夜| 久久免费视频在线观看| 欧美成人综合在线| 久久午夜精品| 国产欧美一区二区三区久久人妖| 国产午夜久久久久| 最新亚洲视频| 欧美一级免费视频| 欧美国产日本高清在线| 亚洲国产一区二区精品专区| 亚洲欧美网站| 免费av成人在线| 国产精品乱码妇女bbbb| 在线成人黄色| 亚洲一区二区三区欧美| 麻豆av一区二区三区久久| 欧美激情一区二区三区|