日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
淺談C++中強(qiáng)制類(lèi)型轉(zhuǎn)換函數(shù)

我們都知道,無(wú)論是用那種程序設(shè)計(jì)語(yǔ)言,通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換函數(shù) ,每個(gè)函數(shù)都可以強(qiáng)制將一個(gè)表達(dá)式轉(zhuǎn)換成某種特定數(shù)據(jù)類(lèi)型。下面介紹C++中的強(qiáng)制類(lèi)型轉(zhuǎn)換函數(shù)。

標(biāo)準(zhǔn)c++中主要有四種強(qiáng)制轉(zhuǎn)換類(lèi)型運(yùn)算符:

  • const_cast,
  • reinterpret_cast,
  • static_cast,
  • dynamic_cast等等。

1)static_cast(a)

將地址a轉(zhuǎn)換成類(lèi)型T,T和a必須是指針、引用、算術(shù)類(lèi)型或枚舉類(lèi)型。

表達(dá)式static_cast(a), a的值轉(zhuǎn)換為模板中指定的類(lèi)型T.在運(yùn)行時(shí)轉(zhuǎn)換過(guò)程中,不進(jìn)行類(lèi)型檢查來(lái)確保轉(zhuǎn)換的安全性。

例子:

 
 
  1. class B { ... };  
  2. class D : public B { ... };  
  3. void f(B* pb, D* pd)  
  4. {  
  5. D* pd2 = static_cast(pb); // 不安全, pb可能只是B的指針B* pb2 = static_cast(pd); // 安全的  
  6. ...  
  7. }  
  8. class B { ... };  
  9. class D : public B { ... };  
  10. void f(B* pb, D* pd)  
  11. {  
  12. D* pd2 = static_cast(pb); // 不安全, pb可能只是B的指針  
  13. B* pb2 = static_cast(pd); // 安全的  
  14. ...  
  15. }  
  16. class B { ... };  
  17. class D : public B { ... };  
  18. void f(B* pb, D* pd)  
  19. {  
  20. D* pd2 = static_cast(pb); // 不安全, pb可能只是B的指針  
  21. B* pb2 = static_cast(pd); // 安全的  
  22. ...  

2)dynamic_cast(a)

完成類(lèi)層次結(jié)構(gòu)中的提升。T必須是一個(gè)指針、引用或無(wú)類(lèi)型的指針。a必須是決定一個(gè)指針或引用的表達(dá)式。

表達(dá)式dynamic_cast(a) 將a值轉(zhuǎn)換為類(lèi)型為T(mén)的對(duì)象指針。如果類(lèi)型T不是a的某個(gè)基類(lèi)型,該操作將返回一個(gè)空指針。

例子:

 
 
  1. class A { ... };  
  2. class B { ... };  
  3. void f()  
  4. {  
  5. A* pa = new A;  
  6. B* pb = new B;  
  7. void* pv = dynamic_cast(pa);  
  8. // pv 現(xiàn)在指向了一個(gè)類(lèi)型為A的對(duì)象  
  9. ...  
  10. pv = dynamic_cast(pb);  
  11. // pv 現(xiàn)在指向了一個(gè)類(lèi)型為B的對(duì)象  

3)const_cast(a)

去掉類(lèi)型中的常量,除了const或不穩(wěn)定的變址數(shù),T和a必須是相同的類(lèi)型。

表達(dá)式const_cast(a)被用于從一個(gè)類(lèi)中去除以下這些屬性:const, volatile, 和 __unaligned.

例子:

 
 
  1. class A { ... };  
  2. void f()  
  3. {  
  4. const A *pa = new A;//const對(duì)象  
  5. A *pb;//非const對(duì)象  
  6. //pb = pa; // 這里將出錯(cuò),不能將const對(duì)象指針賦值給非const對(duì)象  
  7. pb = const_cast(pa); // 現(xiàn)在OK了  
  8. ...  
  9. }  
  10. class A { ... };  
  11. void f()  
  12. {  
  13. const A *pa = new A;//const對(duì)象  
  14. A *pb;//非const對(duì)象  
  15. //pb = pa; // 這里將出錯(cuò),不能將const對(duì)象指針賦值給非const對(duì)象  
  16. pb = const_cast(pa); // 現(xiàn)在OK了  
  17. ...  
  18. }  
  19. class A { ... };  
  20. void f()  
  21. {  
  22. const A *pa = new A;//const對(duì)象  
  23. A *pb;//非const對(duì)象  
  24. //pb = pa; // 這里將出錯(cuò),不能將const對(duì)象指針賦值給非const對(duì)象  
  25. pb = const_cast(pa); // 現(xiàn)在OK了  
  26. ...  

 4)reinterpret_cast(a)

任何指針都可以轉(zhuǎn)換成其它類(lèi)型的指針,T必須是一個(gè)指針、引用、算術(shù)類(lèi)型、指向函數(shù)的指針或指向一個(gè)類(lèi)成員的指針。

表達(dá)式reinterpret_cast(a)能夠用于諸如char* 到 int*,或者One_class* 到 Unrelated_class*等類(lèi)似這樣的轉(zhuǎn)換,因此可能是不安全的。

例子:

 
 
  1. class A { ... };  
  2. class B { ... };  
  3. void f()  
  4. {  
  5. A* pa = new A;  
  6. void* pv = reinterpret_cast(pa);  
  7. // pv 現(xiàn)在指向了一個(gè)類(lèi)型為B的對(duì)象,這可能是不安全的  
  8. ...  

不過(guò),C++中也存在一些弱類(lèi)型,希望不要用強(qiáng)制類(lèi)型轉(zhuǎn)換。希望通過(guò)本文的介紹能夠給你帶來(lái)幫助。


網(wǎng)頁(yè)題目:淺談C++中強(qiáng)制類(lèi)型轉(zhuǎn)換函數(shù)
鏈接分享:http://www.5511xx.com/article/cdgppej.html