跳到正文

第3章学习笔记:控制流与数据组织

课程笔记

通过逐步可编译的程序掌握控制流与数据组织,从现象走到语言规则、资源状态和工程证据。

关联:章节 第3章 控制流与数据组织

第3章笔记:控制流与数据组织

本章问题

通过逐步可编译的程序掌握控制流与数据组织,从现象走到语言规则、资源状态和工程证据。 七课组成一条从可编译现象到语言规则、对象状态和工程验证的链,不能拆成互不相干的语法点。

七课连接

  • 条件分支与布尔逻辑:规则 condition selects one path;实验任务为写一个能编译运行的最小程序展示“条件分支与布尔逻辑”,记录输入、关键对象状态、输出和编译命令,并用规则 condition selects one path 解释结果;严格边界为不得把“条件分支与布尔逻辑”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《循环不变量》的输入或约束。
  • 循环不变量:规则 invariant holds before each iteration;实验任务为写一个能编译运行的最小程序展示“循环不变量”,记录输入、关键对象状态、输出和编译命令,并用规则 invariant holds before each iteration 解释结果;严格边界为不得把“循环不变量”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《数组与范围for》的输入或约束。
  • 数组与范围for:规则 0≤index<size;实验任务为写一个能编译运行的最小程序展示“数组与范围for”,记录输入、关键对象状态、输出和编译命令,并用规则 0≤index<size 解释结果;严格边界为不得把“数组与范围for”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《字符串与字符处理》的输入或约束。
  • 字符串与字符处理:规则 text is a sequence with encoding;实验任务为写一个能编译运行的最小程序展示“字符串与字符处理”,记录输入、关键对象状态、输出和编译命令,并用规则 text is a sequence with encoding 解释结果;严格边界为不得把“字符串与字符处理”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《枚举与结构体》的输入或约束。
  • 枚举与结构体:规则 enum names states;实验任务为写一个能编译运行的最小程序展示“枚举与结构体”,记录输入、关键对象状态、输出和编译命令,并用规则 enum names states 解释结果;严格边界为不得把“枚举与结构体”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《迭代器区间初识》的输入或约束。
  • 迭代器区间初识:规则 [first,last) is half-open;实验任务为写一个能编译运行的最小程序展示“迭代器区间初识”,记录输入、关键对象状态、输出和编译命令,并用规则 [first,last) is half-open 解释结果;严格边界为不得把“迭代器区间初识”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《控制流建模实验》的输入或约束。
  • 控制流建模实验:规则 state+input→state';实验任务为写一个能编译运行的最小程序展示“控制流建模实验”,记录输入、关键对象状态、输出和编译命令,并用规则 state+input→state' 解释结果;严格边界为不得把“控制流建模实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《函数契约与参数》的输入或约束。

实验闭环

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

复盘

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