0

0

c++中四种cast转换(static_cast, dynamic_cast, const_cast, reinterpret_cast)的区别

下次还敢

下次还敢

发布时间:2025-11-09 12:04:02

|

904人浏览过

|

来源于php中文网

原创

C++中四种类型转换操作符各有用途:static_cast用于相关类型转换如基本类型或继承类指针的上行转换;dynamic_cast用于多态类型的下行转换,具备运行时检查,安全性高但有性能开销;const_cast专门用于添加或移除const或volatile属性,需谨慎使用以防未定义行为;reinterpret_cast进行低层指针重解释,如指针与整数互转,风险大、可移植性差。选择应基于转换意图:优先static_cast,安全下行用dynamic_cast,处理const用const_cast,仅在底层编程时使用reinterpret_cast。

c++中四种cast转换(static_cast, dynamic_cast, const_cast, reinterpret_cast)的区别

在C++中,四种类型转换操作符(cast)各有用途和适用场景。它们比C风格的强制转换更安全、更明确,能帮助开发者表达转换意图,编译器也能据此进行检查。

static_cast

用于相关类型之间的合理转换,比如基本数据类型之间的转换、有继承关系的类指针或引用之间的向上或向下转换(不进行运行时检查)。

常见用途:
  • 将int转为double: double d = static_cast<double>(5);</double>
  • 父类指针指向子类对象(上行转换):Base* b = static_cast<base>(&derived);
  • 显式调用构造函数进行类型转换(如自定义类型转换)
注意:下行转换(父类转子类)使用 static_cast 是可能的,但不安全,因为没有运行时类型检查。

dynamic_cast

主要用于多态类型的下行转换或跨类转换,提供运行时类型检查。要求类至少有一个虚函数(即多态类型)。

典型用法:
  • 安全地将基类指针转为派生类指针:Derived* d = dynamic_cast<derived>(base_ptr);</derived>
  • 转换失败时返回 nullptr(指针)或抛出异常(引用)
优点:安全性高,适合在继承体系中做条件性转换。但有一定性能开销,因为需要RTTI(运行时类型信息)。

const_cast

唯一能移除或添加 const 或 volatile 属性的操作符

飞书多维表格
飞书多维表格

表格形态的AI工作流搭建工具,支持批量化的AI创作与分析任务,接入DeepSeek R1满血版

下载

立即学习C++免费学习笔记(深入)”;

典型场景:
  • 调用第三方接口时,参数是非 const,但你持有 const 对象(谨慎使用)
  • 重载函数中区分 const 和非 const 版本
示例:const int a = 10; int* p = const_cast<int>(&a);</int>警告:修改原本被声明为 const 的对象是未定义行为,除非原对象本身不是 const。

reinterpret_cast

进行低层的、无保证的重新解释型转换,比如把指针转为整数,或一种指针类型转为另一种完全无关的指针类型。

常见用途:
  • 指针与整型互转:uintptr_t addr = reinterpret_cast<uintptr_t>(ptr);</uintptr_t>
  • 不同函数指针类型之间转换
  • 底层编程、序列化、内存操作等场景
风险:可移植性差,结果依赖平台和实现,容易引发未定义行为,应尽量避免。

基本上就这些。每种 cast 都有其设计目的,选择哪个取决于你要做什么转换。优先使用 static_cast,需要安全下行转换时用 dynamic_cast,处理 const 问题用 const_cast,只有在非常底层且清楚后果时才用 reinterpret_cast。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

562

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1030

2023.08.02

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.2万人学习

C 教程
C 教程

共75课时 | 5.4万人学习

C++教程
C++教程

共115课时 | 21.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号