跳到正文

第4章学习笔记:函数与程序分解

课程笔记

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

关联:章节 第4章 函数与程序分解

第4章笔记:函数与程序分解

本章问题

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

七课连接

  • 函数契约与参数:规则 contract=precondition+postcondition;实验任务为写一个能编译运行的最小程序展示“函数契约与参数”,记录输入、关键对象状态、输出和编译命令,并用规则 contract=precondition+postcondition 解释结果;严格边界为不得把“函数契约与参数”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《值传递、引用传递与const引用》的输入或约束。
  • 值传递、引用传递与const引用:规则 copy versus alias is observable;实验任务为写一个能编译运行的最小程序展示“值传递、引用传递与const引用”,记录输入、关键对象状态、输出和编译命令,并用规则 copy versus alias is observable 解释结果;严格边界为不得把“值传递、引用传递与const引用”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《返回值与值类别初识》的输入或约束。
  • 返回值与值类别初识:规则 return transfers a value;实验任务为写一个能编译运行的最小程序展示“返回值与值类别初识”,记录输入、关键对象状态、输出和编译命令,并用规则 return transfers a value 解释结果;严格边界为不得把“返回值与值类别初识”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《重载与默认参数》的输入或约束。
  • 重载与默认参数:规则 overload resolution chooses best match;实验任务为写一个能编译运行的最小程序展示“重载与默认参数”,记录输入、关键对象状态、输出和编译命令,并用规则 overload resolution chooses best match 解释结果;严格边界为不得把“重载与默认参数”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《递归与调用栈》的输入或约束。
  • 递归与调用栈:规则 depth follows subproblem chain;实验任务为写一个能编译运行的最小程序展示“递归与调用栈”,记录输入、关键对象状态、输出和编译命令,并用规则 depth follows subproblem chain 解释结果;严格边界为不得把“递归与调用栈”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《lambda与可调用对象》的输入或约束。
  • lambda与可调用对象:规则 closure stores captures;实验任务为写一个能编译运行的最小程序展示“lambda与可调用对象”,记录输入、关键对象状态、输出和编译命令,并用规则 closure stores captures 解释结果;严格边界为不得把“lambda与可调用对象”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《函数组合实验》的输入或约束。
  • 函数组合实验:规则 small functions compose by contracts;实验任务为写一个能编译运行的最小程序展示“函数组合实验”,记录输入、关键对象状态、输出和编译命令,并用规则 small functions compose by contracts 解释结果;严格边界为不得把“函数组合实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《自动、动态与静态存储期》的输入或约束。

实验闭环

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

复盘

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