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

Impossible is nothing  
  愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風來又走   女人如花花似夢
公告
日歷
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
統計
  • 隨筆 - 8
  • 文章 - 91
  • 評論 - 16
  • 引用 - 0

導航

常用鏈接

留言簿(4)

隨筆分類(4)

隨筆檔案(8)

文章分類(77)

文章檔案(91)

相冊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
C++風格的類型轉換的用法
這是More?Effecitve?C++里的第二條對類型轉換講的很好,也很基礎好懂。
Item?M2:盡量使用C++風格的類型轉換
仔細想想地位卑賤的類型轉換功能(cast),其在程序設計中的地位就象goto語句一樣令人鄙視。但是它還不是無法令人忍受,因為當在某些緊要的關頭,類型轉換還是必需的,這時它是一個必需品。
不過C風格的類型轉換并不代表所有的類型轉換功能。
一 來它們過于粗魯,能允許你在任何類型之間進行轉換。不過如果要進行更精確的類型轉換,這會是一個優點。在這些類型轉換中存在著巨大的不同,例如把一個指向 ?const對象的指針(pointer-to-const-object)轉換成指向非const對象的指針(pointer-to-non -const?-object)(即一個僅僅去除const的類型轉換),把一個指向基類的指針轉換成指向子類的指針(即完全改變對象類型)。 傳統的C風格的類型轉換不對上述兩種轉換進行區分。(這一點也不令人驚訝,因為C風格的類型轉換是為C語言設計的,而不是為C++語言設計的)。
二 來C風格的類型轉換在程序語句中難以識別。在語法上,類型轉換由圓括號和標識符組成,而這些可以用在C++中的任何地方。這使得回答象這樣一個最基本的有 關類型轉換的問題變得很困難:“在這個程序中是否使用了類型轉換?”。這是因為人工閱讀很可能忽略了類型轉換的語句,而利用象grep的工具程序也不能從 語句構成上區分出它們來。
C++通過引進四個新的類型轉換操作符克服了C風格類型轉換的缺點,這四個操作符是,? static_cast,?const_cast,?dynamic_cast,?和reinterpret_cast。 在大多數情況下,對于這些操作符你只需要知道原來你習慣于這樣寫,
(type)?expression
而現在你總應該這樣寫:
static_cast
< type > (expression)
例如,假設你想把一個int轉換成double,以便讓包含int類型變量的表達式產生出浮點數值的結果。如果用C風格的類型轉換,你能這樣寫:
int?firstNumber,?secondNumber;

double?result?=?((double)firstNumber)/secondNumber;
如果用上述新的類型轉換方法,你應該這樣寫:
double?result?=?static_cast
< double > (firstNumber)/secondNumber;
這樣的類型轉換不論是對人工還是對程序都很容易識別。
static_cast? 在功能上基本上與C風格的類型轉換一樣強大,含義也一樣。它也有功能上限制。例如,你不能用static_cast象用C風格的類型轉換一樣把 ?struct轉換成int類型或者把double類型轉換成指針類型,另外,static_cast不能從表達式中去除const屬性,因為 另一個新的類型轉換操作符const_cast有這樣的功能。
其它新的C++類型轉換操作符被用在需要更多限制的地方。const_cast用于 類型轉換掉表達式的const或volatileness屬性。通過使用const_cast,你向人們和編譯器強調你通過類型轉換想做的只是改變一些東 西的?constness或者volatileness屬性。這個含義被編譯器所約束。如果你試圖使用const_cast來完成修改 constness?或者volatileness屬性之外的事情,你的類型轉換將被拒絕。下面是一些例子:
class?Widget?{??};
class?SpecialWidget:?public?Widget?{??};
void?update(SpecialWidget?*psw);
SpecialWidget?sw;?//?sw?是一個非const?對象。
const?SpecialWidget&?csw?=?sw;?//?csw?是sw的一個引用
//?它是一個const?對象
update(
&csw );?//?錯誤!不能傳遞一個const?SpecialWidget*?變量
//?給一個處理SpecialWidget*類型變量的函數
update(const_cast
< SpecialWidget * > ( &csw ));
//?正確,csw的const被顯示地轉換掉(
//?csw和sw兩個變量值在update
//函數中能被更新)
update((SpecialWidget*)
&csw );
//?同上,但用了一個更難識別
//的C風格的類型轉換
Widget?*pw?=?new?SpecialWidget;
update(pw);?//?錯誤!pw的類型是Widget*,但是
//?update函數處理的是SpecialWidget*類型
update(const_cast
< SpecialWidget * > (pw));
//?錯誤!const_cast僅能被用在影響
//?constness?or?volatileness的地方上。,
//?不能用在向繼承子類進行類型轉換。
到目前為止,const_cast最普通的用途就是轉換掉對象的const屬性。
第 二種特殊的類型轉換符是dynamic_cast,它被用于安全地沿著類的繼承關系向下進行類型轉換。這就是說,你能用dynamic_cast把指向基 類的指針或引用轉換成指向其派生類或其兄弟類的指針或引用,而且你能知道轉換是否成功。失敗的轉換將返回空指針(當對指針進行類型轉換時)或者拋出異常 (當對引用進行類型轉換時):
Widget?*pw;

update(dynamic_cast
< SpecialWidget * > (pw));
//?正確,傳遞給update函數一個指針
//?是指向變量類型為SpecialWidget的pw的指針
//?如果pw確實指向一個對象,
//?否則傳遞過去的將使空指針。
void?updateViaRef(SpecialWidget&?rsw);
updateViaRef(dynamic_cast
< SpecialWidget & > (*pw));
//正確。傳遞給updateViaRef函數
//?SpecialWidget?pw?指針,如果pw
//?確實指向了某個對象
//?否則將拋出異常
dynamic_casts在幫助你瀏覽繼承層次上是有限制的。它不能被用于缺乏虛函數的類型上(參見條款M24),也不能用它來轉換掉constness:
int?firstNumber,?secondNumber;

double?result?=?dynamic_cast
< double > (firstNumber)/secondNumber;
//?錯誤!沒有繼承關系
const?SpecialWidget?sw;

update(dynamic_cast
< SpecialWidget * > ( &sw ));
//?錯誤!?dynamic_cast不能轉換
//?掉const。
如你想在沒有繼承關系的類型中進行轉換,你可能想到static_cast。如果是為了去除const,你總得用const_cast。
這四個類型轉換符中的最后一個是reinterpret_cast。使用這個操作符的類型轉換,其的轉換結果幾乎都是執行期定義(implementation-defined)。因此,使用reinterpret_casts的代碼很難移植。
reinterpret_casts的最普通的用途就是在函數指針類型之間進行轉換。例如,假設你有一個函數指針數組:
typedef?void?(*FuncPtr)();?//?FuncPtr?is?一個指向函數
//?的指針,該函數沒有參數
//?返回值類型為void
FuncPtr?funcPtrArray[10];?//?funcPtrArray?是一個能容納
//?10個FuncPtrs指針的數組
讓我們假設你希望(因為某些莫名其妙的原因)把一個指向下面函數的指針存入funcPtrArray數組:
int?doSomething();
你不能不經過類型轉換而直接去做,因為doSomething函數對于funcPtrArray數組來說有一個錯誤的類型。在FuncPtrArray數組里的函數返回值是void類型,而doSomething函數返回值是int類型。
funcPtrArray[0]?=?
&doSomething; ?//?錯誤!類型不匹配
reinterpret_cast可以讓你迫使編譯?
posted on 2006-04-16 22:56 笑笑生 閱讀(167) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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.com| 国产一区二区三区网站| 欧美午夜不卡视频| 欧美精品久久99| 女女同性精品视频| 美女视频黄免费的久久| 欧美中在线观看| 午夜精品久久久久99热蜜桃导演| 在线视频欧美一区| 99re6热只有精品免费观看| 91久久精品日日躁夜夜躁国产| 久久亚洲影院| 久久久久久噜噜噜久久久精品| 亚洲欧美日韩第一区| 亚洲一区二区动漫| 在线亚洲伦理| 一区二区三区四区五区视频| 99re亚洲国产精品| 国产自产女人91一区在线观看| 国产精品视频久久一区| 国产精品免费网站| 国产精品久久久久久久app| 欧美天天视频| 欧美视频在线免费| 国产精品高清在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲国产一区在线观看| 亚洲福利视频网站| 亚洲人成人77777线观看| 亚洲精品日韩在线| 日韩视频一区二区| 一区二区三区欧美亚洲| 亚洲视频一二三| 亚洲欧美清纯在线制服| 欧美一区二区| 久久人人爽人人爽| 欧美成人免费小视频| 亚洲国产影院| 9久re热视频在线精品| 亚洲一区国产视频| 欧美一区二区三区四区夜夜大片| 久久精品人人做人人爽| 亚洲综合电影| 久久精品国产久精国产思思| 久久久亚洲国产天美传媒修理工| 裸体一区二区| 欧美日韩天天操| 国产精品日日摸夜夜添夜夜av| 国产日韩欧美在线观看| 亚洲电影在线播放| 中日韩午夜理伦电影免费| 亚洲欧美国产另类| 久久久久久午夜| 91久久久国产精品| 亚洲一区自拍| 久久综合电影一区| 欧美色一级片| 国产一区二区三区日韩欧美| 亚洲高清二区| 亚洲一区二区三区在线播放| 久久久www成人免费精品| 欧美韩日一区二区三区| 亚洲天堂av高清| 久久精品在线视频| 欧美日韩喷水| 国产最新精品精品你懂的| 亚洲精品在线视频观看| 香蕉亚洲视频| 亚洲夫妻自拍| 亚洲免费视频网站| 欧美成人午夜剧场免费观看| 国产精品亚洲片夜色在线| 欧美不卡三区| 牛夜精品久久久久久久99黑人| 欧美成人网在线| 亚洲美女啪啪| 久久久久久久波多野高潮日日| 欧美日韩一区二区在线| 亚洲第一精品影视| 亚洲欧美久久久| 亚洲国产福利在线| 销魂美女一区二区三区视频在线| 欧美精品激情在线| 尤物在线精品| 香蕉久久一区二区不卡无毒影院| 亚洲黄一区二区三区| 久久国产精品久久精品国产| 国产精品av一区二区| 亚洲激情亚洲| 久久人人97超碰精品888| 中文网丁香综合网| 欧美精品一区二区三区高清aⅴ| 国产亚洲a∨片在线观看| 亚洲一区二区免费视频| 亚洲国产精品国自产拍av秋霞 | 久久精品国产久精国产爱| 国产精品高清在线| 夜夜夜久久久| 欧美激情精品久久久久久久变态| 午夜精品一区二区三区在线 | 亚洲精选一区二区| 另类尿喷潮videofree| 国产亚洲一区二区三区在线播放| 亚洲影院色无极综合| 久久精品国产99国产精品澳门| a91a精品视频在线观看| 欧美激情欧美狂野欧美精品| 亚洲高清在线视频| 美女精品国产| 久久久亚洲国产美女国产盗摄| 国产亚洲激情在线| 欧美在线视屏| 亚洲欧美卡通另类91av | 亚洲视频二区| 国产精品超碰97尤物18| 亚洲一二三区在线| 亚洲免费观看在线观看| 欧美日韩国产免费观看| av成人毛片| 99国产精品久久| 欧美视频在线一区| 亚洲欧美日韩国产一区二区| 一区二区三区毛片| 久久一区亚洲| 亚洲高清视频在线| 欧美高清在线一区| 欧美国产精品劲爆| 夜夜嗨av一区二区三区中文字幕 | 欧美一区二区视频在线观看2020 | 日韩亚洲一区二区| 亚洲精品乱码久久久久久| 欧美日韩ab片| 亚洲一区二区三区四区在线观看 | 国产日韩专区| 久久伊人亚洲| 蜜臀99久久精品久久久久久软件 | 一个色综合导航| 国产精品久久久免费| 久久9热精品视频| 久久久国产午夜精品| 亚洲黄色免费电影| 99精品国产高清一区二区| 国产精品视频网址| 玖玖视频精品| 欧美激情在线播放| 午夜精品久久久久久久99黑人| 午夜影院日韩| 亚洲国产精品久久91精品| 亚洲人成网站影音先锋播放| 欧美性理论片在线观看片免费| 欧美制服丝袜| 欧美gay视频激情| 亚洲一区网站| 久久国产精品亚洲77777| 亚洲精品一二三区| 亚洲一区网站| 黄网站色欧美视频| 亚洲精品字幕| 国产亚洲电影| 亚洲欧洲在线一区| 国产日韩免费| 亚洲第一福利视频| 国产精品一区二区你懂得| 欧美刺激午夜性久久久久久久| 欧美色视频一区| 快she精品国产999| 欧美视频在线观看免费| 美日韩免费视频| 国产精品a久久久久| 欧美bbbxxxxx| 国产精品少妇自拍| 亚洲国产成人一区| 国产亚洲欧美在线| 亚洲精品自在久久| 在线观看国产成人av片| 亚洲素人在线| 亚洲韩国一区二区三区| 午夜欧美不卡精品aaaaa| 亚洲六月丁香色婷婷综合久久| 性欧美8khd高清极品| 中文日韩在线| 另类专区欧美制服同性| 久久riav二区三区| 欧美日韩精品综合| 欧美国产日产韩国视频| 国产一区二区无遮挡| 正在播放亚洲| 99天天综合性| 女女同性女同一区二区三区91| 久久国产精品一区二区三区四区|