跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

详解C++中四种类型的转换

目录const_cast static_cast reinterpret_cast dynamic_cast代码C语言中我们使用 int a=(int) b;的方式强制转换C++提供了四种类型转换方式const_cast把常量属性去掉的一个转换.

const int a =10;int *p1=(int *)(&a);//C 语言 OK int *p2=const_cast(&a);//OK

​​​​​​​double *p3 =(double *) (&a)//c 语言中可以,p3的寻址范围变大,带来风险

double *p4=const_cast(&a);//c++在编译阶段就提示错误只用于去掉常量属性的地方int b=const_cast(a);//NO ,ERROR const_carst<这里必须是指针或者引用>static_cast能够提供编译器认为安全的类型转换90%使用场景是这个,这个用的是比较多的,几乎能做任何类型转换,但是是要译器认为安全的类型转换int a=10;char b=static_cast(a);//OK

int *p=nullptr;short *b=static_cast(p) ; //c++ NO , 两者之间没有任何联系double *b=static_cast(p) ;//C++ NO , 两者之间没有任何联系double *b1=(double *)(p) ;//C语言 OK 基类和派生类之间可以使用 static_cast reinterpret_castint *p=nullptr;short *b=reinterpret_cast(p) ; //c++ OK ,double *b=reinterpret_cast(p) ;//C++ OK ,double *b1=(double *)(p) ;//C语言 OK类似于C语言的强制类型转换dynamic_cast主要用着继承结构中,可以支持RTTI类型识别的上下转换代码#include using namespace std;

class A{

public:

void virtual function(){

cout<<"A function()"<

}

};

class B : public A{

public:

void virtual function(){cout<<"B function()"<

}

void virtual test(){cout<<"B function()"<

}

};

class C : public A{

public:

void virtual function(){

cout<<"C function()"<

}

};

class D : public A{

public:

void virtual function(){cout<<"D function()"<

};

void show(A * pa){//dynamic_cast 会检查p指针是否指向的是一个B对象//pb->vfptr->vftable ->RTTI信息,如果dynamic_cast转换成功//返回 指向B的地址,否则返回nullptr B *pb =dynamic_cast 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;

}到此这篇关于详解C++中四种类型的转换的文章就介绍到这了,更多相关C++类型转换内容请搜索脚本之家以前的文章或您可能感兴趣的文章:详解C++中常用的四种类型转换方式C++超详细讲解强制类型转换C++强制类型转换的四种方式C++中的四种类型转换C++中4种类型转换的方法分享

相关文章