学习笔记 | c++中四种类型cast(强制)转换

c++中四种cast转换

C++四种强制转换方式,应用场景,细节
1、const_cast
  • 用于将const变量转为非const
  • 用来修饰类型的constvolatile属性。除了去掉const或者volatile修饰之外,type_idexpression得到的类型是一样的。
  • 但需要特别注意的是const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用。
2、static_cast
  • 用于各种隐式转换,比如非const转constvoid * 转指针等, static_cast能用于多态向上转化,如果向下转能成功但是不安全,结果未知;
  • 用于基本数据类型之类的转换,如把int转换为char,把int转换成enum。这种转换的安全性也要开发人员来保证。
3、dynamic_cast

用于动态类型转换只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对于引用抛异常。 要深入了解内部转换的原理。

  • 向上转换:指的是子类向基类的转换。
  • 向下转换:指的是基类向子类的转换。

它通过判断在执行到该语句的时候变量的运行时类型和要转换的类型是否相同来判断是否能够进行向下转换。

  • dynamic_cast会动用运行时信息RTTI来进行类型安全检查,因此dynamic_cast存在一定的效率损失。当使用dynamic_cast时,该类型必须含有虚函数,这是因为dynamic_cast使用了存储在vtable中的信息来判断实际的类型,RTTI运行时类型识别用于判断类型。typeid表达式的形式时typeid(e),typeid操作的结果是一个常量对象的引用,该对象的类型是type_infotype_info的派生。
4、reinterpret_cast
  • 几乎什么都可以转,比如将 int转指针 ,可能会出问题,尽量少用;
  • 可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。

为什么不使用C的强制转换?

  • C的强制转换表面上看起来功能强大什么都能转,但是转化不够明确,不能进行错误检查,容易出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值