C++的四种强制类型转换符,看了就懂

运行时类型检查转换dynamic_cast

用途及条件

1、基类要有虚函数

2、主要用于“安全地向下转型”

解释

1、为什么基类要有虚函数?

答:dynamic_cast在运行时会进行类型检查,这种检查不是语法上的检查,而是真实情况地检查。如何检查?如果代码中使用了强制类型转换dynamic_cast,编译器会在运行时生成一段代码来查询对象的虚函数表,利用虚函数表和虚函数表指针判断原对象是否可以安全地转换成目标对象。所以基类中要有虚函数,不然调用dynamic_cast会报错。

这段代码,基类没有虚函数,调用dynamic_cast报错 “ 操作数必须包含多态类型 ”

2、什么是安全地向下转型

说白了,就是将 指向派生类的基类指针或基类引用 安全地 转换成派生类指针或派生类引用 ;或者将空基类指针安全地转换成 派生类指针;引用必须初始化,所以没有将空引用转换的说法;

3、向上转型

“先上转型”(即派生类指针或引用类型转换为其基类类型),本身就是安全的,尽管可以使用dynamic_cast进行转换,但这是没必要的, 普通的转换已经可以达到目的

static_cast

用途:

1、用于内置类型的转换(这种转换用c风格的强制转换也是一样的)

2、指针之间的转换

reinterpret_cast

reinterpret_cast<目标类型>(原类型);

<目标类型>和(原类型)中必须有一个是指针或引用类型。

用途:

1、改变指针或引用的类型

2、将指针或引用转换成整型

3、将整型转换成指针或引用

const_cast

前面四种类型转换不能去掉变量的const和volatile特性

这里的变量是指指针或引用(其实引用就是指针,理解指针的就行了)

为什么说这里的变量是指指针,而不能是内置变量? 因为对于内置变量来说,就只是简单的赋值,和const无关

去掉指针的const

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值