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

(轉載)使用標準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>
            亚洲毛片av| 欧美一区二区观看视频| 夜夜爽www精品| 亚洲另类黄色| 亚洲一区二区精品在线观看| 在线视频亚洲| 欧美亚洲一级| 久久婷婷国产综合精品青草 | 欧美日韩精品免费观看视一区二区| 久久综合中文色婷婷| 欧美福利一区| 国产精品日韩一区二区| 黄色精品一二区| 99精品久久免费看蜜臀剧情介绍| 亚洲欧美激情视频在线观看一区二区三区 | 欧美成人69| 欧美午夜免费影院| 精品51国产黑色丝袜高跟鞋| 99在线热播精品免费| 久久福利精品| 亚洲精品一线二线三线无人区| 亚洲欧美在线一区| 欧美国产日韩免费| 国产一区二区三区丝袜| 一区二区高清| 欧美91福利在线观看| 一区二区三区视频在线看| 久久综合给合久久狠狠色| 欧美午夜久久久| 亚洲欧洲一区| 久久精品中文| 亚洲免费av片| 在线看国产一区| 国产精品国产三级国产aⅴ入口| 国产午夜精品理论片a级大结局 | 99综合视频| 久久噜噜噜精品国产亚洲综合| 欧美日韩一级视频| 亚洲国产成人在线视频| 久久riav二区三区| 一本久久a久久免费精品不卡| 玖玖玖国产精品| 激情欧美一区二区三区| 欧美一级理论性理论a| 亚洲人成在线观看一区二区| 在线视频亚洲一区| 欧美高清影院| 亚洲成人原创| 六月婷婷久久| 久久久91精品国产一区二区三区| 国产精品亚洲网站| 香港成人在线视频| 亚洲丝袜av一区| 欧美亚男人的天堂| 一区二区三区四区蜜桃| 亚洲激情第一区| 欧美成人黑人xx视频免费观看| 国产亚洲欧美一区二区| 久久精精品视频| 欧美一区亚洲一区| 国产日韩av在线播放| 久久av资源网站| 欧美一乱一性一交一视频| 欧美精品在线网站| 一区二区三区日韩欧美| 亚洲精品视频免费在线观看| 欧美韩日高清| 亚洲视频综合| 精品动漫3d一区二区三区免费| 国产精品一区在线播放| 欧美一区三区二区在线观看| 亚洲欧美在线看| 精品999在线观看| 欧美激情在线观看| 欧美日韩一区在线视频| 亚洲视频精品在线| 亚洲免费在线精品一区| 好吊一区二区三区| 欧美激情按摩| 欧美视频一区二| 国产精品日韩久久久久| 久久成人精品无人区| 久久人91精品久久久久久不卡| 最新中文字幕亚洲| 亚洲一区欧美激情| 最新日韩在线视频| 免费亚洲一区| 国产精品久久久久999| 欧美高清视频在线| 欧美日韩免费一区二区三区| 欧美理论视频| 国产日韩欧美精品| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产区在线观看成人精品| 亚洲字幕在线观看| 国产精品久久久| 免费成人高清视频| 亚洲高清不卡在线| 欧美制服第一页| 国产精品久久久久一区| 久久综合图片| 性刺激综合网| 国产精品激情| 欧美99在线视频观看| 欧美日韩亚洲一区二区三区在线| 欧美伊人影院| 亚洲欧美第一页| 亚洲人成人99网站| 免费试看一区| 久久成人在线| 国产精品福利影院| 亚洲国产精品热久久| 亚洲国产视频直播| 精品福利免费观看| 亚洲免费伊人电影在线观看av| 午夜电影亚洲| 在线观看视频欧美| 欧美性猛交xxxx乱大交蜜桃 | 欧美国产三级| 亚洲国产精品福利| 欧美精品激情blacked18| 快射av在线播放一区| 国产亚洲一区二区三区在线观看 | 国产揄拍国内精品对白| 亚洲狠狠丁香婷婷综合久久久| 1024日韩| 欧美午夜剧场| 欧美日韩国产欧| 一本色道久久加勒比88综合| 亚洲一区二区三| 日韩亚洲欧美成人| 红杏aⅴ成人免费视频| 欧美激情亚洲一区| 亚洲欧美日韩精品久久亚洲区 | 亚洲国产日韩在线一区模特| 亚洲精品中文字幕在线| 亚洲电影激情视频网站| 国产一区二区三区在线观看网站| 久久视频国产精品免费视频在线| 欧美影院在线| 日韩亚洲欧美中文三级| 亚洲电影有码| 亚洲精品国产精品国自产在线| 久久久999精品视频| 欧美在线一区二区| 欧美一区二区在线免费观看| 激情欧美日韩一区| 一区二区视频免费在线观看| 欧美肥婆在线| 最新日韩中文字幕| 亚洲视频一区在线观看| 久久激情综合网| 久久国产视频网站| 亚洲第一中文字幕在线观看| 亚洲第一在线| 国产精品久久久久高潮| 老司机凹凸av亚洲导航| 亚洲国产人成综合网站| 99在线观看免费视频精品观看| 国产精品色午夜在线观看| 亚洲深夜福利在线| 免费成人黄色av| 久久精品123| 久久久亚洲高清| 亚洲国产成人91精品| 国产日韩欧美二区| 国产精品vvv| 亚洲视频在线免费观看| 一区二区高清| 欧美福利视频| 欧美第一黄色网| 久久久亚洲欧洲日产国码αv| 欧美有码在线视频| 亚洲影院高清在线| 亚洲色在线视频| 在线亚洲高清视频| 一区二区三区欧美| 老司机午夜精品| 亚洲视频综合在线| 欧美激情一区二区三区在线视频| 久久综合伊人77777蜜臀| 欧美国产视频在线观看| 91久久亚洲| 久久丁香综合五月国产三级网站| 久久久久一区二区三区| 国产精品麻豆欧美日韩ww| 一本大道久久a久久精品综合| 久久夜色精品国产欧美乱| 欧美一区二区视频在线观看2020 | 国产精品久久久久免费a∨| 亚洲国产日日夜夜| 久久性天堂网| 亚洲青色在线| 午夜精品久久久久久久男人的天堂| 99这里只有久久精品视频| 欧美黄色大片网站| 国产一区二区三区无遮挡| 欧美在线看片| 欧美国产日韩二区| 亚洲国内欧美|