跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++类型转换操作符与IO流体系解析

C++ 中四种命名强制类型转换操作符(static_cast、reinterpret_cast、const_cast、dynamic_cast)的区别与应用场景,并讲解了 C++ IO 流体系的核心组件,包括标准输入输出流、文件流(ifstream/ofstream/fstream)及字符串流(stringstream)的使用方法、注意事项及代码示例。

板砖工程师发布于 2026/3/30更新于 2026/10/25100 浏览
C++类型转换操作符与IO流体系解析

C++ 的类型转换

C 语言的类型转换有隐式类型转换和强制类型转换

但是这个转换的可视性太差了,有时很难意识到发生了类型转换,最终导致运行结果和预期不符

所以在 C++ 中引出了四种命名的强制类型转换操作符,来加强类型转换的可视性

static_cast、reinterpret_cast、const_cast、dynamic_cast

四种命名的强制类型转换操作符

static_cast

static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用,但是不能用于两个不相关的类型进行转换

reinterpret_cast

reinterpret_cast用于不同类型之间的转换

const_cast

const_cast的作用就是删除变量的 const 属性

但是要注意:

在用 p2 去改变 n 的值的时候,编译器可能会优化掉对 n 内存的访问操作,比如:用 p2 去改了 n 的值,但是程序运行时还是原来那个值

这个时候就需要 volatile 去让编译器每次都访问内存里的 n

dynamic_cast

dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用 (动态转换)

  1. dynamic_cast只能用于父类含有虚函数的类

  2. dynamic_cast会检查是否能转换成功,能成功的话就会转换,不能成功的话会返回空指针

如果是子类转换成父类的话,不需要 dynamic_cast,用 static_cast 就行了

如果是父类转换成子类的话,用 dynamic_cast,这是安全的,但不一定能转换成功

RTTI(这个了解一下就行了)

这个的意思就是进行运行时的类型识别

C++支持 RTTI 的方式有三种:

  1. typeid 运算符

  2. dynamic_cast 运算符

  3. decltype

C++ 的 IO 流

istream是输入东西 ostream是输出东西

iostream是输入输出东西

C 语言的 IO 流里面主要用到的有 fprintf, , , ,

fscanf
printf
sprintf
sscanf

C++当前也能用这些,但是自定义类型的话得用 cin和cout才能支持

引申:如果程序一直要求输入的话,可以 ctrl+z终止输入,当然 ctrl+c也可以,自己一般用 ctrl+z

ios流里面有个 operator bool()的成员函数来判断输入输出流的状态:

C++ 文件的 IO 流

C语言文件的 IO 流同样可以使用哈

ifstream:专门用于从文件中读取数据,提供了打开、关闭文件以及读取文件内容的相关操作。

ofstream:专门用于向文件中写入数据,提供了打开、关闭文件以及写入文件内容的相关操作。

fstream:结合了 ifstream 和 ofstream 的功能,允许对同一个文件进行读写操作。

// 用法示例
ifstream ifs("text.txt", ios_base::in | ios_base::binary); // text.txt是文件名,ios_base::in | ios_base::binary是读取模式和二进制模式打开文件
ifs.read((char*)&info, sizeof(info)); // 读二进制
ifs >> info; // 读文本

注意:

二进制读写不能用 string, vector这样的对象存数据,这样写进去的只会是一个指针,如果进程结束了就成野指针了

stringstream

这个其实不常用,了解一下就行

eg:用途:

  1. 数据转换成字符串

  2. 序列化和反序列化结构数据(但是一般不用 stringstream去实现)

目录

  1. C++ 的类型转换
  2. 四种命名的强制类型转换操作符
  3. static_cast
  4. reinterpret_cast
  5. const_cast
  6. dynamic_cast
  7. RTTI(这个了解一下就行了)
  8. C++ 的 IO 流
  9. C++ 文件的 IO 流
  10. stringstream

更多推荐文章

查看全部
  • Llama-Factory与PyTorch版本兼容性问题排查手册
  • C++ 红黑树的概念、规则与实现
  • 耳机阻抗与前端搭配:不同阻值耳机的推力解析
  • 深度优先搜索(DFS)实战:整数分解问题详解
  • 基于 MCP 协议的 Claude 智能体天气服务落地示例
  • 归并排序时间复杂度 O(nlogn) 解析:排序链表实现
  • 970. Powerful Integers 题解:C 语言实现
  • OpenClaw 部署方式对比:云端、WSL、Mac 及 Ubuntu 虚拟机
  • HTML 前端游戏项目合集
  • OpenClaw 自定义 Skill 开发实战:实现 Excel 数据批量处理
  • 内网环境下搭建大模型微调平台实战指南
  • 三年前端面试复盘:字节阿里美团高频题与手写源码
  • Python 实现网页搜索引擎:从 0 到 1 构建指南
  • 可可图片编辑 HarmonyOS 上架应用分享
  • 基于 Q-Learning 的三维无人机动态避障路径规划 (MATLAB)
  • 大模型 RAG 技术深度解析:从入门到进阶
  • 2026 年 10 款 AI 文献综述工具盘点
  • 机器人产业十年演进:从专用机械到通用具身智能
  • Python PyQt 上位机实时绘图功能实现
  • 汽车参数对比爬虫实战:从静态页面到动态渲染的Python技术栈解析

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online