跳到正文

第10章学习笔记:错误处理、I/O与边界

课程笔记

通过逐步可编译的程序掌握错误处理、I/O与边界,从现象走到语言规则、资源状态和工程证据。

关联:章节 第10章 错误处理、I/O与边界

第10章笔记:错误处理、I/O与边界

本章问题

通过逐步可编译的程序掌握错误处理、I/O与边界,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。

七课连接

  • 错误码、optional与expected思路:规则 failure channel is part of type/API;实验任务为写一个能编译运行的最小程序展示“错误码、optional与expected思路”,记录输入、关键对象状态、输出和编译命令,并用规则 failure channel is part of type/API 解释结果;严格边界为不得把“错误码、optional与expected思路”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《异常的抛出与捕获》的输入或约束。
  • 异常的抛出与捕获:规则 throw unwinds to matching handler;实验任务为写一个能编译运行的最小程序展示“异常的抛出与捕获”,记录输入、关键对象状态、输出和编译命令,并用规则 throw unwinds to matching handler 解释结果;严格边界为不得把“异常的抛出与捕获”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《异常安全保证》的输入或约束。
  • 异常安全保证:规则 basic/strong/nothrow guarantees differ;实验任务为写一个能编译运行的最小程序展示“异常安全保证”,记录输入、关键对象状态、输出和编译命令,并用规则 basic/strong/nothrow guarantees differ 解释结果;严格边界为不得把“异常安全保证”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《流式输入输出状态》的输入或约束。
  • 流式输入输出状态:规则 stream state controls next read;实验任务为写一个能编译运行的最小程序展示“流式输入输出状态”,记录输入、关键对象状态、输出和编译命令,并用规则 stream state controls next read 解释结果;严格边界为不得把“流式输入输出状态”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《文件与序列化边界》的输入或约束。
  • 文件与序列化边界:规则 format needs version and validation;实验任务为写一个能编译运行的最小程序展示“文件与序列化边界”,记录输入、关键对象状态、输出和编译命令,并用规则 format needs version and validation 解释结果;严格边界为不得把“文件与序列化边界”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《断言、契约与日志》的输入或约束。
  • 断言、契约与日志:规则 assert is not input validation;实验任务为写一个能编译运行的最小程序展示“断言、契约与日志”,记录输入、关键对象状态、输出和编译命令,并用规则 assert is not input validation 解释结果;严格边界为不得把“断言、契约与日志”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《健壮输入实验》的输入或约束。
  • 健壮输入实验:规则 reject malformed input deterministically;实验任务为写一个能编译运行的最小程序展示“健壮输入实验”,记录输入、关键对象状态、输出和编译命令,并用规则 reject malformed input deterministically 解释结果;严格边界为不得把“健壮输入实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《线程启动与join》的输入或约束。

实验闭环

从空目录建立在线兼容的C++17程序,开启警告,运行本章两道代码题各四组测试,再新增一个失败用例。C++20扩展另作显式比较。保存编译命令、输入、输出、首个诊断和修复后的回归。涉及资源就画所有权,涉及容器就标迭代器有效性,涉及并发就画happens-before。

复盘

错题不能只记“粗心”。标记它属于阶段、类型、控制、对象生存期、所有权、异常、复杂度还是并发。更换输入与实现重做阶段卷;能解释规则为何阻止错误,并能展示反例,才算迁移成功。