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

重新解释类型转换

低层次的位模式重新解释

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

相关推荐
Boilermaker19925 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂6 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs6 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_996 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子6 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34166 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
古城小栈7 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90907 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab