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

重新解释类型转换

低层次的位模式重新解释

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

相关推荐
morn_venus20 小时前
使用qt控制台抓取tcp数据包
c++
say_fall20 小时前
C语言容易忽略的小知识点(1)
c语言·开发语言
qq_2148032920 小时前
ArcGIS Runtime与GeoTools融合实践:加密SHP文件的完整读写方案
java·安全·arcgis
不会编程的小寒20 小时前
C++初始继承,继承中构造、析构顺序
开发语言·python
Juchecar20 小时前
Spring是Java语境下的“最优解”的原因与启示
java·spring·node.js
邪恶喵喵20 小时前
Tomcat和负载均衡
java·tomcat·负载均衡
尼古拉斯·纯情暖男·天真·阿玮20 小时前
动态规划——子序列问题
java·算法·动态规划
运维管理20 小时前
Linux系统笔记--Base
开发语言·php
代码不停20 小时前
Java中文件操作和IO
java
夏天的味道٥20 小时前
IDEA 开发工具常用插件整理
java·ide·intellij-idea