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

(轉載)使用標準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>
            久久久青草婷婷精品综合日韩 | 欧美日韩一区二区三区在线观看免| 亚洲一区二区在线视频| 欧美成人免费全部观看天天性色| 久久久亚洲精品一区二区三区 | 欧美国产日韩一区二区| 欧美精彩视频一区二区三区| 欧美激情1区2区3区| 欧美日韩在线不卡一区| 国产精品劲爆视频| 国产婷婷色综合av蜜臀av| 国产日韩专区| 亚洲国产精品激情在线观看| 日韩系列在线| 一本大道av伊人久久综合| 亚洲欧美区自拍先锋| 久久美女性网| 在线亚洲成人| 久久综合狠狠综合久久综合88| 欧美日韩国产成人精品| 国产精品视频一区二区三区| 1769国产精品| 亚洲在线播放| 欧美电影在线观看| 亚洲无玛一区| 欧美大片在线看| 国产午夜精品久久久| 一区二区三区在线免费观看| 久久久国产精品一区| 国产精品一国产精品k频道56| 很黄很黄激情成人| 亚洲与欧洲av电影| 亚洲高清一二三区| 亚洲日韩第九十九页| 欧美亚洲免费在线| 欧美一区二区视频在线观看2020| 欧美激情亚洲| 红桃视频亚洲| 午夜免费在线观看精品视频| 激情亚洲网站| 香蕉精品999视频一区二区 | 国产日韩精品视频一区二区三区| 91久久精品日日躁夜夜躁国产| 午夜视频在线观看一区二区| 欧美激情欧美狂野欧美精品| 欧美一区二区三区播放老司机 | 欧美中文在线免费| 免费不卡中文字幕视频| 日韩一级精品| 美女被久久久| 1000部精品久久久久久久久| 久久久久高清| 亚洲欧美美女| 欧美视频久久| 在线视频精品一区| 亚洲国产高清在线| 亚洲国产精品福利| 久久精品99| 国产精品欧美日韩| 这里只有精品视频| 欧美国产日韩xxxxx| 亚洲综合色激情五月| 亚洲久久一区二区| 欧美日韩国产免费观看| 一区二区激情小说| 99国产一区| 欧美日韩免费观看一区| 女仆av观看一区| 久久亚洲视频| 欧美一区二区啪啪| 久久婷婷国产麻豆91天堂| 国内精品美女av在线播放| 久久精品国产一区二区电影| 欧美一二三区在线观看| 狠狠久久亚洲欧美专区| 欧美成人一品| 欧美激情1区2区| 在线视频你懂得一区二区三区| 一区二区三区高清视频在线观看| 亚洲欧美日韩精品久久久| 99re66热这里只有精品4| 欧美成人精品激情在线观看| 蜜桃精品久久久久久久免费影院| 在线免费观看欧美| 亚洲国产精品成人| 国产精品福利在线| 欧美一区二区三区的| 免费看亚洲片| 亚洲电影av| 欧美黄色免费网站| 亚洲精品一区二区网址| 欧美激情第8页| 欧美日韩一二三四五区| 久久精品国产精品亚洲| 久久久av网站| 亚洲视频每日更新| 亚洲免费影视第一页| 亚洲第一免费播放区| 在线视频你懂得一区二区三区| 国产欧美一区二区三区久久| 狼人天天伊人久久| 国产精品白丝黑袜喷水久久久| 久久久久在线观看| 国产精品乱码| 亚洲观看高清完整版在线观看| 国产精品女人毛片| 最新国产乱人伦偷精品免费网站| 国产女主播一区二区三区| 亚洲国产一区二区精品专区| 国产人成一区二区三区影院| 亚洲美女一区| 亚洲国内自拍| 久久激情综合| 欧美在线影院| 欧美亚洲成人精品| 亚洲精品日韩久久| 在线精品在线| 性高湖久久久久久久久| 亚洲香蕉网站| 欧美人与禽性xxxxx杂性| 乱人伦精品视频在线观看| 国产精品久久久久久久久久三级| 亚洲国产精品va在线看黑人| 在线免费精品视频| 久久精品国产亚洲精品| 性欧美精品高清| 欧美午夜精品伦理| 日韩亚洲成人av在线| 亚洲精品国产精品久久清纯直播| 久久久久成人精品| 久久久久国产精品麻豆ai换脸| 国产伦精品一区二区三区四区免费 | 亚洲看片一区| 美脚丝袜一区二区三区在线观看| 久久久久久色| 国内成人自拍视频| 欧美一区二区三区免费大片| 欧美一级专区| 国产视频亚洲| 午夜精品久久久久久久久久久久久 | 国产私拍一区| 欧美一级片一区| 浪潮色综合久久天堂| 在线观看中文字幕不卡| 老司机久久99久久精品播放免费| 欧美成人综合网站| 久久久久久久久蜜桃| 欧美日韩国产精品一区| 女生裸体视频一区二区三区| 亚洲大胆在线| 欧美激情91| 中文久久乱码一区二区| 久久综合九色综合欧美狠狠| 美女黄网久久| 最新日韩在线| 欧美精品在线观看91| 日韩视频永久免费观看| 性欧美精品高清| 一区二区三区在线观看欧美 | 午夜在线精品偷拍| 久久久国产精品一区| 激情91久久| 欧美美女bbbb| 日韩一级不卡| 久久精品一区二区三区不卡牛牛 | 亚洲一区二区在线看| 久久久99免费视频| 国产一区二区三区在线观看网站 | 国产精品毛片a∨一区二区三区|国 | 亚洲色图自拍| 久久久久国色av免费看影院 | 国产精品视频一区二区高潮| 亚洲欧美国产日韩天堂区| 国产精品草莓在线免费观看| 校园春色国产精品| 欧美中文字幕不卡| 亚洲第一福利视频| 亚洲欧美日韩一区在线| 伊人成综合网伊人222| 欧美成人亚洲成人| 亚洲视频专区在线| 欧美大片va欧美在线播放| 亚洲深爱激情| 国模精品娜娜一二三区| 亚洲精品网站在线播放gif| 影音先锋成人资源站| 欧美日韩一区二区高清| 亚洲国产高清一区二区三区| 一区二区三区视频免费在线观看| 午夜精品久久久久久久白皮肤 | 一区二区欧美在线| 久久在线91| 亚洲一区日韩在线| 国产精品久久网站| 国内精品免费午夜毛片| 久久综合狠狠综合久久激情| 日韩亚洲欧美一区| 欧美成人亚洲成人| 久久不射中文字幕| 一区二区精品|