跳到正文

第2章学习笔记:类型、对象与表达式

课程笔记

通过逐步可编译的程序掌握类型、对象与表达式,从现象走到语言规则、资源状态和工程证据。

关联:章节 第2章 类型、对象与表达式

第2章笔记:类型、对象与表达式

本章问题

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

七课连接

  • 基本类型与值域:规则 range follows representation;实验任务为写一个能编译运行的最小程序展示“基本类型与值域”,记录输入、关键对象状态、输出和编译命令,并用规则 range follows representation 解释结果;严格边界为不得把“基本类型与值域”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《初始化不是赋值》的输入或约束。
  • 初始化不是赋值:规则 initialization selects constructor;实验任务为写一个能编译运行的最小程序展示“初始化不是赋值”,记录输入、关键对象状态、输出和编译命令,并用规则 initialization selects constructor 解释结果;严格边界为不得把“初始化不是赋值”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《const与可变性边界》的输入或约束。
  • const与可变性边界:规则 const constrains mutation path;实验任务为写一个能编译运行的最小程序展示“const与可变性边界”,记录输入、关键对象状态、输出和编译命令,并用规则 const constrains mutation path 解释结果;严格边界为不得把“const与可变性边界”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《引用、指针与空值》的输入或约束。
  • 引用、指针与空值:规则 reference aliases; pointer may be null;实验任务为写一个能编译运行的最小程序展示“引用、指针与空值”,记录输入、关键对象状态、输出和编译命令,并用规则 reference aliases; pointer may be null 解释结果;严格边界为不得把“引用、指针与空值”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《转换、提升与窄化》的输入或约束。
  • 转换、提升与窄化:规则 narrowing can lose information;实验任务为写一个能编译运行的最小程序展示“转换、提升与窄化”,记录输入、关键对象状态、输出和编译命令,并用规则 narrowing can lose information 解释结果;严格边界为不得把“转换、提升与窄化”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《表达式求值与未定义行为》的输入或约束。
  • 表达式求值与未定义行为:规则 sequencing constrains side effects;实验任务为写一个能编译运行的最小程序展示“表达式求值与未定义行为”,记录输入、关键对象状态、输出和编译命令,并用规则 sequencing constrains side effects 解释结果;严格边界为不得把“表达式求值与未定义行为”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《类型安全计算实验》的输入或约束。
  • 类型安全计算实验:规则 type invariant before calculation;实验任务为写一个能编译运行的最小程序展示“类型安全计算实验”,记录输入、关键对象状态、输出和编译命令,并用规则 type invariant before calculation 解释结果;严格边界为不得把“类型安全计算实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《条件分支与布尔逻辑》的输入或约束。

实验闭环

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

复盘

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