最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++中四種類型的轉(zhuǎn)換

 更新時(shí)間:2022年12月08日 10:41:39   作者:Hello_Bugs  
這篇文章主要是想和大家一起聊聊來(lái)C++中的四種類型轉(zhuǎn)換?:const_cast、static_cast、reinterpret_cast和dynamic_cast,感興趣的可以了解一下

C語(yǔ)言中我們使用 int a=(int) b;的方式強(qiáng)制轉(zhuǎn)換

C++提供了四種類型轉(zhuǎn)換方式

const_cast

把常量屬性去掉的一個(gè)轉(zhuǎn)換.

const  int a =10;
int *p1=(int *)(&a);//C 語(yǔ)言 OK
int *p2=const_cast<int *>(&a);//OK

???????double *p3 =(double *) (&a)//c 語(yǔ)言中可以,p3的尋址范圍變大,帶來(lái)風(fēng)險(xiǎn)

double  *p4=const_cast<double *>(&a);//c++在編譯階段就提示錯(cuò)誤

只用于去掉常量屬性的地方

int b=const_cast<int>(a);//NO ,ERROR const_carst<這里必須是指針或者引用>

static_cast

能夠提供編譯器認(rèn)為安全的類型轉(zhuǎn)換

90%使用場(chǎng)景是這個(gè),這個(gè)用的是比較多的,幾乎能做任何類型轉(zhuǎn)換,但是是要譯器認(rèn)為安全的類型轉(zhuǎn)換

int a=10;
char b=static_cast<int>(a);//OK

int *p=nullptr;
short *b=static_cast<short *>(p) ;  //c++ NO , 兩者之間沒(méi)有任何聯(lián)系
double *b=static_cast<double *>(p) ;//C++ NO , 兩者之間沒(méi)有任何聯(lián)系
double *b1=(double *)(p) ;//C語(yǔ)言 OK 

基類和派生類之間可以使用 static_cast 

reinterpret_cast

int *p=nullptr;
short *b=reinterpret_cast<short *>(p) ;  //c++ OK ,
double *b=reinterpret_cast<double *>(p) ;//C++ OK , 
double *b1=(double *)(p) ;//C語(yǔ)言 OK 

類似于C語(yǔ)言的強(qiáng)制類型轉(zhuǎn)換

dynamic_cast

主要用著繼承結(jié)構(gòu)中,可以支持RTTI類型識(shí)別的上下轉(zhuǎn)換

代碼

#include <iostream>
using namespace std;

class  A{

public:
    
    void virtual function(){
		
	cout<<"A function()"<<endl;
		
    }

};

class B : public A{

public:

    void virtual function(){	
	cout<<"B function()"<<endl;
		
   }
	
   void virtual test(){		
	cout<<"B function()"<<endl;
		
   }

};

class C : public A{

public:

    void virtual function(){
		
	cout<<"C function()"<<endl;
		
    }

};

class D : public A{

public:

    void virtual function(){		
	cout<<"D function()"<<endl;		
    }

};

void show(A * pa){
       //dynamic_cast 會(huì)檢查p指針是否指向的是一個(gè)B對(duì)象
       //pb->vfptr->vftable ->RTTI信息,如果dynamic_cast轉(zhuǎn)換成功
       //返回 指向B的地址,否則返回nullptr
       B  *pb =dynamic_cast<B *> pa;
       if(pb!=nullptr){
	    pb->test();
       }
       else{
	    pa->function();
       }
}


int main(){
   B b;
   C c;
   D d;
   show(&b);
   show(&c);
   show(&d);
   return 0; 
        
}

到此這篇關(guān)于詳解C++中四種類型的轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C++類型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或

相關(guān)文章

  • VS2019配置BOOST的方法(v1.70.0庫(kù))

    VS2019配置BOOST的方法(v1.70.0庫(kù))

    這篇文章主要介紹了VS2019配置BOOST的方法(v1.70.0庫(kù)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++共享智能指針shared_ptr的實(shí)現(xiàn)

    C++共享智能指針shared_ptr的實(shí)現(xiàn)

    在C++中沒(méi)有垃圾回收機(jī)制,必須自己釋放分配的內(nèi)存,否則就會(huì)造成內(nèi)存泄露,解決這個(gè)問(wèn)題最有效的方法是使用智能指針,本文主要介紹了C++共享智能指針shared_ptr的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • C++精要分析lambda表達(dá)式的使用

    C++精要分析lambda表達(dá)式的使用

    Lambda表達(dá)式是現(xiàn)代C++在C ++ 11和更高版本中的一個(gè)新的語(yǔ)法糖 ,在C++11、C++14、C++17和C++20中Lambda表達(dá)的內(nèi)容還在不斷更新。 lambda表達(dá)式(也稱為lambda函數(shù))是在調(diào)用或作為函數(shù)參數(shù)傳遞的位置處定義匿名函數(shù)對(duì)象的便捷方法
    2022-05-05
  • OpenCV 圖像拼接和圖像融合的實(shí)現(xiàn)

    OpenCV 圖像拼接和圖像融合的實(shí)現(xiàn)

    本文主要介紹了OpenCV 圖像拼接和圖像融合,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 利用Matlab復(fù)刻掃雷小游戲

    利用Matlab復(fù)刻掃雷小游戲

    windows自帶的游戲《掃雷》是陪伴了無(wú)數(shù)人的經(jīng)典游戲,本程序參考《掃雷》的規(guī)則進(jìn)行了簡(jiǎn)化,用Matlab實(shí)現(xiàn),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn)

    C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn)

    本文主要介紹了C/C++計(jì)算程序執(zhí)行時(shí)間的幾種方法實(shí)現(xiàn),包括使用clock()函數(shù)、使用庫(kù)和使用time.h頭文件中的time()函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • 引用numpy出錯(cuò)詳解及解決方法

    引用numpy出錯(cuò)詳解及解決方法

    這篇文章主要介紹了引用numpy出錯(cuò) 解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++實(shí)現(xiàn)區(qū)塊鏈的源碼

    C++實(shí)現(xiàn)區(qū)塊鏈的源碼

    這篇文章主要介紹了C++實(shí)現(xiàn)區(qū)塊鏈的源碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • C語(yǔ)言題解Leetcode56合并區(qū)間實(shí)例

    C語(yǔ)言題解Leetcode56合并區(qū)間實(shí)例

    這篇文章主要為大家介紹了C語(yǔ)言題解Leetcode56合并區(qū)間實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 詳解C語(yǔ)言結(jié)構(gòu)體的定義和使用

    詳解C語(yǔ)言結(jié)構(gòu)體的定義和使用

    這篇文章主要為大家介紹了C語(yǔ)言結(jié)構(gòu)體的定義和使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12

最新評(píng)論

玉环县| 星座| 含山县| 石门县| 通辽市| 玉林市| 曲阜市| 嘉善县| 太白县| 桦南县| 漳浦县| 宜春市| 南投县| 江川县| 南川市| 江门市| 营山县| 平阴县| 江安县| 彩票| 沾益县| 方城县| 文水县| 延安市| 如皋市| 泾川县| 宁海县| 平利县| 博兴县| 乡宁县| 湘阴县| 于田县| 长垣县| 麟游县| 毕节市| 达拉特旗| 互助| 丹江口市| 秦安县| 那坡县| 固安县|