C++四种类型转换全解

 更新时间:2026年06月04日 09:26:59   作者:折戟不必沉沙  
C++的四种命名式类型转换操作符是:static_cast、dynamic_cast、const_cast 和 reinterpret_cast,‌‌本文介绍C++四种类型转换是什么,感兴趣的朋友一起看看吧

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

  1. static_cast​ - 静态类型转换
    最常用的转换,用于良性转换
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​ - 动态类型转换
    用于多态类型的向下转换,运行时检查类型安全
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 属性
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​ - 重新解释转换
    低级别的重新解释,最危险的转换
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);

到此这篇关于C++四种类型转换全解的文章就介绍到这了,更多相关C++四种类型转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用C语言编辑画图程序的实现方法(推荐)

    利用C语言编辑画图程序的实现方法(推荐)

    下面小编就为大家带来一篇利用C语言编辑画图程序的实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • C语言各种操作符透彻理解下篇

    C语言各种操作符透彻理解下篇

    C 语言提供了丰富的操作符,除了上篇中的算术操作符,移位操作符,位操作符,赋值操作符外,还有单目操作符、关系操作符、逻辑操作符、条件操作符等等,让我们通读本篇来详细了解吧
    2022-02-02
  • C语言return, exit, abort的区别

    C语言return, exit, abort的区别

    这篇文章主要介绍了C语言return, exit, abort的区别,一般情况下,在C语言中退出一个程序用return,如果在main函数中,return在清理局部对象之后,会调用exit函数,和return相比,exit并不会销毁局部对象,下面一起进入文章了解更详细内容吧,需要的朋友也可以参考一下
    2022-01-01
  • C语言的进制转换及算法实现教程

    C语言的进制转换及算法实现教程

    这篇文章主要介绍了C语言的进制转换及算法实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C++ 读写文件安全又简洁的简单实例

    C++ 读写文件安全又简洁的简单实例

    这篇文章主要介绍了C++ 读写文件安全又简洁的简单实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • C语言动态内存的分配最全面分析

    C语言动态内存的分配最全面分析

    动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存,本文带你深入探究C语言中动态内存的管理
    2022-08-08
  • 解读C++编程的相关文件操作

    解读C++编程的相关文件操作

    这篇文章主要介绍了解读C++编程的相关文件操作,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言进阶几分钟带你理解大小端存储模式

    C语言进阶几分钟带你理解大小端存储模式

    这篇文章主要为大家介绍了C语言进阶大小端模式的示例详解,带各位读者朋友五分钟脚踩大小端模式,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • Objective-C中使用STL标准库Queue队列的方法详解

    Objective-C中使用STL标准库Queue队列的方法详解

    这篇文章主要介绍了Objective-C中使用STL标准库Queue队列的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • C语言 简单粗暴的笨方法找水仙花数

    C语言 简单粗暴的笨方法找水仙花数

    这篇文章介绍了C语言找水仙花数最原始的笨方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02

最新评论