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

重新解释类型转换

低层次的位模式重新解释

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

相关推荐
稚辉君.MCA_P8_Java2 分钟前
DeepSeek Java 多线程打印的19种实现方法
java·linux·jvm·后端·架构
白露与泡影5 分钟前
spring Security 认证流程闭环与调用链路详解
java·后端·spring
卡比巴拉—林6 分钟前
Python print()函数详讲
开发语言·python
i***58677 分钟前
Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex
java·人工智能·spring
6***09267 分钟前
MS SQL Server partition by 函数实战三 成绩排名
java
小π军10 分钟前
STL利器:upper_bound与lower_bound的使用
c++
i***279510 分钟前
SpringBoot实现异步调用的方法
java·spring boot·spring
d***292414 分钟前
Springboot中SLF4J详解
java·spring boot·后端
阿在在14 分钟前
Dubbo 与 Spring 整合全流程解析(含生产者与消费者
java·spring·dubbo
奶思图米球14 分钟前
Python多环境管理
开发语言·python