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

C++类型转换与 IO 流详解

C++ 类型转换提供四种命名操作符:static_cast 用于静态转换,reinterpret_cast 用于位模式重解释,const_cast 用于去除 const 属性,dynamic_cast 用于多态下的父子类转换。IO 流体系包含 istream、ostream、fstream 及 stringstream,分别支持控制台、文件及字符串数据的输入输出。掌握这些机制可提升代码安全性与扩展性,避免隐式转换错误及野指针风险。

1951018925发布于 2026/3/22更新于 2026/8/337 浏览
C++类型转换与 IO 流详解

C++ 的类型转换

C 语言的类型转换包含隐式类型转换和强制类型转换,但可视性较差,容易引发逻辑错误。C++ 引入了四种命名的强制类型转换操作符,以增强类型转换的可视性和可控性:static_cast、reinterpret_cast、const_cast 和 dynamic_cast。

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

static_cast

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

reinterpret_cast

用于不同类型之间的底层位模式重解释转换。

const_cast

用于删除变量的 const 属性。注意:修改 const 对象可能导致未定义行为,编译器可能会优化掉对内存的访问。此时可使用 volatile 确保每次访问内存。

dynamic_cast

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

  1. 仅适用于父类含有虚函数的类。
  2. 会检查转换是否成功,成功则返回目标指针,失败则返回空指针。
  3. 子类转父类无需 dynamic_cast,使用 static_cast 即可;父类转子类建议使用 dynamic_cast 以确保安全。

RTTI (运行时类型识别)

C++ 支持 RTTI 的方式包括:

  1. typeid 运算符
  2. dynamic_cast 运算符
  3. decltype

C++ 的 IO 流

IO 流体系涵盖输入输出功能:

  • istream:输入流
  • ostream:输出流
  • iostream:输入输出流

C++ 兼容 C 语言 IO 函数(如 fprintf, fscanf),但对于自定义类型,推荐使用 cin 和 cout 以支持重载。

程序持续要求输入时,可通过 Ctrl+Z 终止输入,Ctrl+C 亦可终止进程。

ios 流提供了 operator bool() 成员函数来判断输入输出流的状态。

C++ 文件的 IO 流

C 语言文件 IO 在 C++ 中同样可用,C++ 提供了更面向对象的文件流类:

  • ifstream:专门用于从文件中读取数据。
  • ofstream:专门用于向文件中写入数据。
  • fstream:结合读写功能,允许对同一文件进行读写操作。

示例用法:

ifstream ifs("text.txt", ios_base::in | ios_base::binary);
ifs.read((char*)&info, sizeof(info)); // 读二进制
ifs >> info; // 读文本

注意:二进制读写不能直接使用 string 或 vector 等对象存储数据,否则可能涉及指针问题导致野指针风险。

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
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VSCode + Copilot AI 编程实战教程:从安装到 Agent 应用
  • 医疗 AI 可信系统构建:向量索引与贝叶斯网络
  • KoboldAI 本地部署与配置实战指南
  • 爬虫实战:传统编程与 AIGC 提示词工程对比
  • C++26 契约编程:三种实现方式与最佳实践
  • 企业微信 Java SDK 集成开发指南
  • Linux 操作系统核心概念与实战入门
  • 基于多版本YOLO与SpringBoot的实时跌倒检测系统
  • VS Code GitHub Copilot 自定义模型 API 支持与搜索功能说明
  • 前端三年复盘:从迷茫摸索到互联网工程实战
  • Ghostty + Yazi + Lazygit 构建现代化终端开发工作流
  • LLaMA-Factory 安装与环境配置实战
  • 低空经济下无人机光伏巡检技术革新与实践
  • 基于 YOLOv11 系列的电动自行车违规载人检测系统开发实践
  • 滑动窗口算法详解与实战
  • OpenClaw Nginx 反向代理部署及 disconnected (1008) 问题解决
  • 使用 Trae 构建本地 AI 对话机器人
  • 昇腾 NPU 部署 Llama 2 模型:性能测试与优化实战
  • STL map/multimap 深度解析:接口使用与核心特性
  • C++ 类与对象进阶:默认成员函数详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • 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