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

重新解释类型转换

低层次的位模式重新解释

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

相关推荐
Web极客码几秒前
如何选择最适合的内容管理系统(CMS)?
java·数据库·算法
gf13211112 分钟前
python_检测音频人声片段
开发语言·python·音视频
爱笑的眼睛112 分钟前
Flask上下文API:从并发陷阱到架构原理解析
java·人工智能·python·ai
wangnaisheng7 分钟前
彩虹编码映射实现:C++与C#
c++·c#
asdfg12589637 分钟前
数组去重(JS)
java·前端·javascript
waves浪游9 分钟前
进程控制(下)
linux·运维·服务器·开发语言·c++
xiaobuding_QAQ10 分钟前
51汇编仿真proteus8.15学习篇二(附源码)
开发语言·汇编·单片机·学习·proteus
别惹CC12 分钟前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
java·人工智能·spring
Dylan的码园13 分钟前
队列与queue
java·数据结构·链表
兵哥工控13 分钟前
mfc两个线程的创建、启动、安全结束实例
c++·mfc·多线程·线程安全退出