你是否长期被C++ 标准IO流深深困扰? 自1998年C++标准IO体系定型至今,20余年过去,这套底层库早已跟不上现代开发需求: 编码逻辑、缓冲机制、国际化Locale、流式读写职责高度耦合,结构僵化难以扩展; 变长字符处理、跨平台宽字符适配、压缩/加密流式扩展处处存在底层短板; facet、locale机制晦涩难懂,标准库底层设计缺陷晦涩无系统讲解; 想要实现自定义数据流、流式加解密、实时哈希、多编码无缝转换,只能层层hack标准库,代码臃肿、稳定性堪忧;
售 价:¥
6.6
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐

内容提要
作者简介
前言
第1章 输入输出概述
1.1 输入输出问题的本质
1.2 流式 IO 与块式 IO
1.3 字符编码与编码转换
1.3.1 从 ASCII 到 Unicode
1.3.2 内建字符类型
1.3.3 广义的编码转换
1.4 国际化支持
1.4.1 国际化、本地化与 locale
1.4.2 locale 与 facet
1.5 IOv2:新的 IO 库
1.6 小结
第2章 设备
2.1 设备概述
2.1.1 输入与输出能力
2.1.2 流语义与定位能力
2.1.3 复制与移动语义
2.1.4 职责边界:设备与转换器
2.1.5 设备契约的形式化
2.1.6 输入与输出接口
2.1.7 重定位接口
2.1.8 io_device 聚合契约
2.1.9 设备操作与流的完整性
2.2 内存设备
2.2.1 mem_device 类模板
2.2.2 核心接口实现与扩展
2.2.3 易用性优化:类模板参数推导
2.3 文件设备
2.3.1 basic_file_device 类模板
2.3.2 文件设备相关操作
2.4 标准输入输出设备
2.4.1 std_device 类模板
2.4.2 设备相关操作
2.5 小结
第3章 数据转换器
3.1 转换器概述
3.1.1 转换器的设计要点
3.1.2 设计原则总结
3.1.3 转换器的接口
3.2 root_cvt
3.2.1 主体结构
3.2.2 构造与析构函数
3.2.3 结构关联与设备边界控制
3.2.4 读写接口
3.2.5 重定位接口
3.2.6 IO 切换接口
3.2.7 make_root_cvt 辅助函数
3.3 读写辅助类
3.3.1 问题背景与设计动机
3.3.2 cvt_io 类模板与辅助类构造
3.3.3 读辅助类
3.3.4 写辅助类
3.3.5 读写辅助类的特化与优化
3.3.6 读写接口使用对比与适用场景
3.4 转换器的缺省实现模板
3.4.1 初步实现
3.4.2 基于语义控制的改进版本
3.5 code_cvt[4]
3.5.1 codecvt_kernel
3.5.2 code_cvt 的主体框架
3.5.3 设备的释放与关联
3.5.4 前缀序列相关接口
3.5.5 输出接口
3.5.6 输入接口
3.5.7 重定位接口
3.5.8 读写转换接口
3.6 用于压缩的转换器 zlib_cvt
3.6.1 主体框架
3.6.2 前缀序列的处理
3.6.3 读取接口
3.6.4 写入接口
3.6.5 刷新接口与刷新行为控制
3.6.6 重定位与读写转换
3.7 用于加密的转换器 chacha20_cvt 与 vigenere_cvt
3.7.1 chacha20_cvt 转换器
3.7.2 vigenere_cvt
3.8 用于哈希计算的转换器 hash_cvt
3.8.1 主体框架
3.8.2 构造函数
3.8.3 输出接口
3.8.4 行为调整接口
3.8.5 输出哈希序列
3.9 构造器
3.9.1 基本构造器
3.9.2 构造器的串连
3.10 小结
第4章 流缓冲区
4.1 运行时转换器
4.1.1 abs_runtime_cvt_imp 类模板
4.1.2 runtime_cvt_imp 类模板
4.1.3 runtime_cvt 类模板
4.2 流缓冲区类模板
4.2.1 ostreambuf
4.2.2 istreambuf
4.2.3 streambuf
4.3 流缓冲区迭代器
4.3.1 输出流缓冲区迭代器
4.3.2 输入流缓冲区迭代器
4.4 小结
第5章 facet
5.1 facet 的设计目标
5.1.1 IO 中的文化相关行为
5.1.2 标准库 facet 的结构特征
5.2 基本框架
5.2.1 abs_ft 类:多态基石与运行时标识
5.2.2 base_ft 类模板:facet 家族的扩展点
5.2.3 ft_basic 类模板:唯一标识符生成器
5.3 ctype facet
5.3.1 引入
5.3.2 base_ft<ctype> 特化
5.3.3 ctype_conf 模板
5.3.4 实现 ctype facet
5.3.5 设计总结
5.4 collate facet
5.4.1 引入
5.4.2 collate_conf 模板
5.4.3 实现 collate facet
5.4.4 设计总结
5.5 numeric facet
5.5.1 引入
5.5.2 numeric_conf 模板
5.5.3 实现 numeric facet
5.5.4 设计总结
5.6 monetary facet
5.6.1 引入
5.6.2 base_ft<monetary>
5.6.3 monetary_conf 模板
5.6.4 实现 monetary facet
5.6.5 设计总结
5.7 timeio facet
5.7.1 引入
5.7.2 ft_basic<timeio> 特化
5.7.3 timeio_conf 模板
5.7.4 解析上下文及其类型转换
5.7.5 实现 timeio facet
5.7.6 设计总结
5.8 messages facet
5.8.1 引入
5.8.2 base_ft<messages>
5.8.3 messages_conf 模板
5.8.4 实现 messages facet
5.8.5 设计总结
5.9 小结
第6章 locale
6.1 locale 类模板概述
6.2 主体框架
6.3 locale 的构造与赋值
6.3.1 构造函数
6.3.2 初始化辅助逻辑与全局缓存
6.4 添加与删除 facet 配置对象
6.4.1involve 函数
6.4.2 remove 函数模板
6.4.3 添加 messages facet 配置对象
6.5 facet 的构造与获取
6.5.1 检查与获取 facet 配置对象
6.5.2 facet 的构造规则
6.5.3 检查 facet 对象
6.5.4 获取 facet 对象
6.6 小结
第7章 IO 流类
7.1 流对象的职责
7.2 ios_defs 名字空间
7.2.1 格式化标记
7.2.2 IO 状态
7.2.3 failure 异常
7.3 io_state_and_exp 类
7.3.1 流状态对象与维护接口
7.3.2 流异常对象与维护接口
7.4 ios_base 类模板
7.4.1 格式化信息
7.4.2 扩展存储与回调
7.4.3 实现扩展存储
7.4.4 实现流的回调
7.5 奇特的递归模板模式(CRTP)
7.6 输出流
7.6.1 用户视角:一次典型的输出操作
7.6.2 主体框架
7.6.3 stream_common_operators 类模板
7.6.4 abs_ostream 类与 ostream_operators 类模板
7.6.5 out_sentry 类模板
7.7 输入流
7.7.1 用户视角:一次典型的输入操作
7.7.2 主体框架
7.7.3 istream_operators 类模板
7.7.4 in_sentry 类模板
7.8 双向流
7.8.1 主体框架
7.8.2 读写模式切换
7.9 流的同步
7.9.1 sync 封装器
7.9.2 使用方式与锁的粒度
7.9.3 设计考量与局限性
7.10 小结
第8章 标准 IO 流对象
8.1 标准 IO 对象的本质
8.2 执行路径回放
8.3 安全的静态初始化
8.4 标准输出流的实现
8.4.1 stdout_api 辅助模板
8.4.2 窄字符标准输出流
8.4.3 code_cvt_stdio 转换器
8.4.4 宽字符标准输出流
8.5 标准输入流的实现
8.5.1 stdin_api 辅助模板
8.5.2 窄字符标准输入流
8.5.3 宽字符标准输入流
8.6 与 C 标准库的同步
8.6.1 输出同步
8.6.2 输入同步
8.6.3 全局同步函数
8.6.4 配置函数的线程安全
8.7 小结
后 记
附录A 现有 IO 接口的结构性分析
A.1 facet 的结构性分析
背景与范围
A.1.1 facet 类型族标识机制的结构复杂性
A.1.2 facet 双层接口结构的抽象层级问题
A.1.3 facet 功能类别划分的抽象维度问题
A.1.4 facet 与流上下文的抽象边界问题
A.1.5 facet 生命周期模型与 locale 的结构性绑定
A.1.6 运行时多态与核心算法未分离
A.1.7 ctype::is 的组合语义表达问题
A.1.8 ctype 序列接口的返回值契约问题
A.1.9 ctype::toupper 与 ctype::tolower 的输入输出模型限制
A.1.10 codecvt 的状态类型参数与多态机制冲突
A.1.11 codecvt 的抽象层级混合与职责耦合
A.1.12 collate::hash 接口的独立性不足
A.1.13 collate::compare 接口语义表达不充分
A.1.14 num_get 与 num_put facet 存在使用限制
A.1.15 num_get 与 num_put 的填充字符语义不一致
A.1.16 numeric facet 接口返回值的语义问题
A.1.17 moneypunct 的表示策略类型化导致 facet 类型分裂
A.1.18 "C" locale 的货币默认规则未形成封闭表达
A.1.19 货币的格式化与解析不应使用 long double 作为接口
A.1.20 时间相关 facet 缺失导致接口分散
A.1.21 时间格式化与解析接口使用 tm* 指针
A.1.22 时间解析接口的冗余与结构收敛
A.1.23 时间解析结果直接映射为 tm 的结构性限制
A.1.24 时间解析对输入迭代器能力缺乏结构约束
A.1.25 时间 facet 对 std::tm 的结构绑定限制
A.1.26 messages facet 缺少翻译资源路径建模接口
A.1.27 messages facet 对外部本地化机制的直接依赖问题
A.1.28 messages facet 的 open / close 接口未形成最小语义模型
A.1.29 messages::get 接口未收敛到最小语义模型
A.1.30 messages facet 对空字符串缺乏语义约束
A.2 locale 相关问题
A.2.1 locale 中不应包含 codecvt facet
A.2.2 locale 应被设计为类模板
A.2.3 静态函数 classic 与 global 意义不大
A.2.4 locale::name 返回值在单一与组合 locale 中的结构差异
A.3 流缓冲区相关问题
A.3.1 流缓冲区类的设备与转换器结构耦合
A.3.2 流缓冲区的输入与输出位置信息区分
A.3.3 fpos 描述绝对位置的局限性
A.3.4 输入与输出流缓冲区未区分
A.3.5 输入流同步的意义不明确
A.3.6 对 char_traits 与 eof 的依赖问题
A.3.7 流缓冲区的接口层级增加理解成本
A.4 流相关问题
A.4.1 ios_base 与 basic_ios 的格式化信息分布分散
A.4.2 流的错误状态表达维度与系统分层结构不对齐
A.4.3 流的延迟异常传播导致原始异常信息丢失
A.4.4 流的扩展存储对象所有权与复制语义不明确
A.4.5 自定义类型格式化与解析逻辑难以高效实现
A.4.6 输入流缺乏结构化同步接口
A.4.7 输入流中 get 与 getline 的分隔符处理语义分散
A.4.8 输入流中 gcount 接口语义不显式
A.4.9 流的链式调用对派生支持不佳
A.4.10 操作未维护流的完整性
A.4.11 文件流类型与打开标记的语义重复
A.4.12 流对象缺乏统一的复制语义
A.5 C 运行时 I/O 与编码机制的结构性约束
A.5.1 流具有方向性
A.5.2 标准输入缺少原子性获取多个字符的接口
A.5.3 标准输入文件读取缺少兼容性保证
A.5.4 fgets / gets 的接口语义以表示为中心
A.5.5 fseek 的返回值无法表示定位有效性
A.5.6 mbrtowc 的返回值语义存在不一致
附录B 日期与时间格式化细节
B.1 背景概念
B.1.1 纪年
B.1.2 周纪年法
B.1.3 时区
B.1.4 数值的本地表示
B.1.5 格式化说明符与格式化字符串
B.2 支持的说明符与相应行为
附录C messages facet 使用示例
C.1 概述:与 gettext 的集成
C.2 步骤一:在代码中集成翻译支持
C.3 步骤二:使用 xgettext 提取翻译模板
C.4 步骤三:创建并编辑语言文件 (.po)
C.5 步骤四:编译二进制消息目录 (.mo)
C.6 步骤五:部署与运行
C.7 工作原理深度解析
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜