C++ | 四种类型转换


前言

简单记录一下C++中常用的四种类型转换。


提示:以下是本篇文章正文内容,下面案例可供参考

一、类型转化的四种方式

1.去常转换:const_cast
2.静态转换:static_cast
3.动态转换:dynamic_cast
4.重新解释:reinterpret_cast

二、每个类型转换的使用以及注意事项

1.const_cast

const_ cast(a) 常被用于去除这里a变量或表达式的const属性, a的类型就是T
在这里插入图片描述
作用:
把常量指针或常量引用转换为非常量指针或非常量引用,并仍然指向原来的对象;把非常量指针或非常量引用转换为常量指针或常量引用,并仍然指向原来的对象;强制转换类型必须是指针*或引用&

2.static_cast

static_ cast它能在内置的数据类型间互相转换,对于类只能在有联系的指针类型间进行转换.
1.用于基本类型间的转换
2.不能用于基本类型指针间的转换
在这里插入图片描述
3.于有继承关系类对象之间的转换和类指针之间的转换
(派生类转换成基类时安全(上行转换),基类转换成派生类时不安全(下行转换))
在这里插入图片描述
在这里插入图片描述
4.无类型指针的转换(不安全)

int main()
{
	int a=10;
	void*vi=&10;
	float*fp=static_cast<float*>(vi);//不安全,当使用读取*fp的值时会扩大读取的字节个数,造成读取数据错误的情况。
}

3.reinterpret_cast

reinterpret_ cast任何指针都可以转换成其它类型的指针,T必须是一个指针、 引用、算术类型、指向函数的指针或指向一个类成员的指针。任何指针都可以转换成其它类型的指针,不安全的转换。
在这里插入图片描述

4.dynamic_cast

dynamic_ cast 转换符只能用于指针或者引用。dynamic_cast转换符只能用于含有虚函数的类。dynamic_ cast转换操作符在执行类型转换时首先将检查能否成功转换,如果能成功转换则转换之,如果转换失败, T是指针则反回一个nullptr,如果是转换的是T引用,则抛出一个bad_ cast异常, 所以在使用dynamic_ cast转换之间应使用if语句对其转换成功与否进行测试。
使用条件:公有继承且有虚函数的下行转换,否则会报错!

示例1:
在这里插入图片描述
示例2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

提示:这里对文章进行总结:

RTTI(Run Time Type ldentification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引|用所指的对象的实际派生类型。

RAII也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值