C++四种类型转换是什么

C++ 中的四种类型转换是 C++ 引入的更安全、更明确的类型转换操作符,相比 C 风格的强制转换更加精细和可控:

  1. static_cast - 静态类型转换
    最常用的转换,用于良性转换
cpp 复制代码
int i = 10;
double d = static_cast<double>(i);  // 基本类型转换

class Base {};
class Derived : public Base {};
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);  // 向下转换(不安全,不检查)

int* p = nullptr;
void* vp = static_cast<void*>(p);  // void* 转换
  1. dynamic_cast - 动态类型转换
    用于多态类型的向下转换,运行时检查类型安全
cpp 复制代码
class Base { virtual void foo() {} };
class Derived : public Base {};

Base* b = new Derived();

// 安全的向下转换
Derived* d = dynamic_cast<Derived*>(b);
if (d != nullptr) {  // 转换成功
    // 使用 d
}

// 转换失败返回 nullptr(对指针)或抛出异常(对引用)
  1. const_cast - 常量性转换
    添加或移除 const、volatile 属性
cpp 复制代码
const int ci = 10;
int* pi = const_cast<int*>(&ci);  // 移除 const
*pi = 20;  // 未定义行为,ci 原本是 const

void print(char* str) { /* 修改 str */ }
const char* s = "hello";
print(const_cast<char*>(s));  // 临时移除 const
  1. reinterpret_cast - 重新解释转换
    低级别的重新解释,最危险的转换
cpp 复制代码
int* p = new int(65);
char* c = reinterpret_cast<char*>(p);  // 重新解释指针类型

int i = 0x12345678;
float f = reinterpret_cast<float&>(i);  // 二进制重新解释

// 函数指针转换
typedef void (*FuncPtr)();
FuncPtr func = reinterpret_cast<FuncPtr>(0x12345678);
相关推荐
Bruce_Liuxiaowei1 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
aramae2 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
汉克老师3 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6663 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
风合星语4 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
91刘仁德5 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
码行山野赴时序归途5 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
景熙55235 小时前
单体项目编写思路和落地形式
java·开发语言
库玛西6 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
别动我齐刘海6 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人