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

重新解释类型转换

低层次的位模式重新解释

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

相关推荐
程序员清风12 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
端平入洛13 小时前
delete又未完全delete
c++
皮皮林55113 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊19 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing19 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠1 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840821 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide1 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
端平入洛2 天前
auto有时不auto
c++
IT探险家2 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java