C++的四种类型转换

static_cast

静态类型转换:用于基本类型之间的转换,有继承关系之间的转换,void* 与其他指针类型转换。

编译时候检查,无运行时开销,不保证安全性,继承体系可能因类型不匹配导致未定义行为

cpp 复制代码
class Base{
    Base(){
    }
    ~Base(){}
};

class Child:public Base
{
    
};
//派生类指针或引用转为基类表示
Base * base = new Child;//进行上行转换时安全的,因为new申请的地址空间大于base需要的地址空间
Child * child = static_cast<Child *> (base);

dynamic_cast

动态类型转换:note:如果发生多态,那么类型转换必定是安全的。

运行时检查类型有效性,只有转换时安全的,那么才会进行转换。

const_cast

常量类型转换:用于移除或者添加const限定符

不修改底层数据,仅仅修改编译器对类型的解释

cpp 复制代码
const char* msg = "Hello";

const_cast<char*>(msg)

note:不能对非指针类型或者引用使用

​reinterpret_cast

重新解释类型转换

低层次的位模式重新解释

高度不安全,依赖平台和编译器实现,不推荐使用

相关推荐
suimeng68 分钟前
Java的Selenium的特殊元素操作与定位之模态框
java·自动化测试·selenium
老歌老听老掉牙16 分钟前
C++使用Qt Charts创建数据可视化图表
c++·qt·信息可视化
车载测试工程师22 分钟前
ARXML文件解析-2
java·服务器·网络·数据库·经验分享·网络协议·车载系统
javaisC27 分钟前
数据结构----------顺序查找,折半查找和分块查找(java实现)
java·数据结构·算法
振鹏Dong27 分钟前
搜索树——AVL、红黑树、B树、B+树
java
捡田螺的小男孩29 分钟前
新来的技术总监,把DDD落地的那叫一个高级优雅!
java·后端
陳長生.36 分钟前
JAVA EE_多线程-初阶(二)
java·开发语言·jvm·java-ee
Mcband1 小时前
主流程发起,去除子流程的时长计算问题
java·前端·算法
QTX187301 小时前
常见的 JavaScript 框架和库
开发语言·javascript·ecmascript
猿java1 小时前
银行系统需要服务降级吗?
java·后端·面试