C++的IO流和C++的类型转换----《Hello C++ Wrold!》(29)--(C/C++)

C++的IO流和C++的类型转换----《Hello C++ Wrold!》(29)--(C/C++)

文章目录

前言

在 C++ 编程体系中,类型转换与 IO 流是支撑程序数据处理与交互的两大核心环节。类型转换关乎数据在不同类型间的安全传递与运算适配,而 IO 流则负责程序与外部设备(如键盘、屏幕、文件)之间的数据输入与输出,二者共同构成了 C++ 程序实现功能、交互信息的基础框架。​

C 语言中的类型转换方式虽简洁,却存在可视性差、难以追踪的问题,容易在复杂程序中引发潜在的逻辑错误。为解决这一痛点,C++ 引入了四种命名明确的强制类型转换操作符 ——static_cast、reinterpret_cast、const_cast与dynamic_cast,通过规范的语法形式,让类型转换过程更清晰、更可控,同时针对不同转换场景提供了精准的约束与支持。​

而在 IO 流领域,C++ 在兼容 C 语言 IO 函数的基础上,构建了更具面向对象特性的 IO 流体系。从用于控制台交互的istream(输入流)、ostream(输出流),到用于文件操作的ifstream(文件输入流)、ofstream(文件输出流)与fstream(文件读写流),再到用于字符串数据处理的stringstream,C++ 的 IO 流机制为不同场景下的数据传输提供了灵活、统一的接口,尤其对自定义类型的 IO 支持,更是大幅提升了代码的扩展性与复用性。​

本文将系统梳理 C++ 类型转换的四种操作符特性与使用场景,深入解析 IO 流体系的核心组件与实际应用方法,结合具体代码示例,帮助读者理解并掌握这两部分关键知识,从而在实际编程中更安全地处理类型转换、更高效地实现数据 IO 交互,提升代码的质量与开发效率。​

C++的类型转换

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

但是这个转换的可视性太差了–有时很难意识到发生了类型转换,最终导致运行结果和预期不符
所以在C++中引出了四种命名的强制类型转换操作符,来加强类型转换的可视性

static_castreinterpret_castconst_castdynamic_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 fscanfprintf scanfsprintf sscanf

C++当前也能用这些,但是自定义类型的话得用cin和cout才能支持
引申:如果程序一直要求输入的话,可以ctrl+z终止输入,当然ctrl+c也可以–自己一般用ctrl+z
ios流里面有个operator bool()的成员函数来判断输入输出流的状态:

C++文件的IO流

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

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

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

fstream:结合了 ifstreamofstream 的功能,允许对同一个文件进行读写操作。
用法: eg: 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去实现)

Read more

近五年体内微/纳米机器人赋能肿瘤精准治疗综述:以 GBM 为重点

近五年体内微/纳米机器人赋能肿瘤精准治疗综述:以 GBM 为重点

摘要 实体瘤治疗长期受制于递送效率低、肿瘤组织渗透不足以及免疫抑制与耐药等问题。传统纳米药物多依赖被动累积与扩散,难以在肿瘤内部形成均匀有效的药物浓度分布。2021–2025 年,体内微/纳米机器人(包括外场驱动微型机器人、自驱动纳米马达以及生物混合机器人)围绕“运动能力”形成了三条相互收敛的技术路线: 其一,通过磁驱、声驱、光/化学自驱等方式实现运动增强递药与深层渗透,将治疗从“被动到达”推进到“主动进入”; 其二,与免疫治疗深度融合,实现原位免疫唤醒与肿瘤微环境重塑; 其三,针对胶质母细胞瘤(glioblastoma, GBM)等难治肿瘤,研究趋势转向“跨屏障递送(BBB/BBTB)+ 成像/外场闭环操控 + 时空可控释放”的系统工程。 本文围绕“运动—分布—疗效”的因果链条,总结 2021–2025 年代表性研究与关键评价指标,讨论临床转化所需的安全性、

By Ne0inhk

Moonshine专为端侧/边缘设备做的深度架构优化+可变长度推理+隐私原生+多语言强适配

一、架构与推理效率:端侧原生设计(核心优势) 1. 可变长度输入,无强制30秒窗口 * Whisper固定30秒块,短音频也要填充到30秒再处理,固定开销大。 * Moonshine支持任意长度音频,计算量与音频长度线性正比,短音频(1–3秒)速度提升5–15倍。 * 延迟:10秒音频在手机/树莓派上仅50–150ms,Whisper同条件约500–1500ms。 2. 轻量化Transformer+高效算子 * 基于Transformer但大幅精简,参数仅27M–245M(Tiny/Base/Medium),远小于Whisper同定位模型。 * 采用旋转位置嵌入(RoPE),更好捕捉语音时序,减少冗余计算。 * 推理引擎深度优化,支持INT8/FP16量化,内存占用再降70%+。 3. 流式/实时推理原生支持 * 内置流式解码,边录边转,无需等整段音频结束。 * 端到端延迟**<50ms*

By Ne0inhk
开发兜不住?让数据库来兜底:金仓 SQL 防火墙的工程化实践

开发兜不住?让数据库来兜底:金仓 SQL 防火墙的工程化实践

开发兜不住?让数据库来兜底:金仓 SQL 防火墙的工程化实践 在真实的生产环境中,数据库安全从来不是“写完代码就结束”的问题,而是一个贯穿系统生命周期的持续对抗过程。哪怕你已经严格执行参数化查询、ORM 框架封装、输入校验等规范,仍然无法保证系统绝对无注入风险——遗留系统、动态 SQL、第三方组件、甚至临时脚本,都会成为潜在突破口。 这也是为什么越来越多企业开始将防线下沉到数据库层:既然应用层不可控,那就让数据库成为最后一道“强制执行的安全边界”。 本文结合 KingbaseES 的 SQL 防火墙机制,从原理、模式设计到性能表现,讲清楚它是如何在工程上解决 SQL 注入问题的。 一、SQL 注入的本质:语义劫持,而不是“字符串拼接问题” 很多人对 SQL 注入的理解还停留在“拼接字符串不安全”,但从数据库视角来看,本质其实是: 攻击者篡改了 SQL 的语义结构(

By Ne0inhk
【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linux,教你安装Java常用软件、及spring boot项目部署

【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linux,教你安装Java常用软件、及spring boot项目部署

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL,Java基础,Rust】 🎈热门专栏:🎊【Python,Javaweb,Springboot】  感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 目录 🎈Linux安装 🎁安装步骤 🎁网卡设置 🎁目录功能及介绍  🎈常用命令 🎁初体验 🎟命令  🎟实战 🎟出现乱码 🎟小技巧 🎟Linux命令格式 🎁文件目录操作命令 🎟ls 🎟cd 🎟cat 🎟more 🎟tail 🎟rmdir 🎟rm 🎁拷贝移动命令 🎟cp 🎟mv 🎁打包压缩命令 🎟tar 🎁文本编辑 🎟vi/vim 🎗命令模式 🎗插入模式

By Ne0inhk