深入理解C++强制类型转换

xiaoxiao2021-02-28  62

C++四种强制转换类型

static_cast

reinterpret_cast

const_cast

dynamic_cast

static_cast

静态转换,用于非多态类型,任何标准的转换都可以用它,不能用于两个互不相干的类型

可以理解为能进行隐式转换类型的使用它

代码示例:

int i=1; double d=static_cast<double>(i); //正确 int* p=&i; p=static_cast<int> (i); //int和int*不相关

reinterpret_cast

不相关类型之间的转换

代码示例:

int i=1; int* p=&i; p=reinterpret_cast<int>(i); const_cast

去常性的强制类型转换,将const变为非const类型

代码示例:

const int a=2; int* p=const_cast<int*>(&a); *p=a; dynamic_cast *****最重要的一个

动态转换,用于将一个父类对象的指针或引用)转化为子类对象的指针或引用

分类:

上转型:子类对象指针传给父类指针或引用

下转型:父类对象指针传给子类指针或引用

使用场景:

(1)只能用于含有虚函数的类

(2)先检查能否转化,能转化进行转化,不能转化返回0

(3)一般来说,父类不能转化成功,子类可以转化成功,从对象模型的角度我们可以看出,由于父类缺少子类特有的部分,所以指过去的时候会产生越界访问。

代码示例:

class B { virtual void fun() {} } class D:public B {} B* pa=NULL; D* pd=dynamic_cast<B*>(pa);

转载请注明原文地址: https://www.6miu.com/read-83517.html

最新回复(0)