跳到正文

第7章学习笔记:模板与泛型程序设计

课程笔记

通过逐步可编译的程序掌握模板与泛型程序设计,从现象走到语言规则、资源状态和工程证据。

关联:章节 第7章 模板与泛型程序设计

第7章笔记:模板与泛型程序设计

本章问题

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

七课连接

  • 函数模板与实例化:规则 template instantiates for used types;实验任务为写一个能编译运行的最小程序展示“函数模板与实例化”,记录输入、关键对象状态、输出和编译命令,并用规则 template instantiates for used types 解释结果;严格边界为不得把“函数模板与实例化”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《类模板与类型参数》的输入或约束。
  • 类模板与类型参数:规则 class template defines a family;实验任务为写一个能编译运行的最小程序展示“类模板与类型参数”,记录输入、关键对象状态、输出和编译命令,并用规则 class template defines a family 解释结果;严格边界为不得把“类模板与类型参数”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《类型推导与auto》的输入或约束。
  • 类型推导与auto:规则 deduction follows context;实验任务为写一个能编译运行的最小程序展示“类型推导与auto”,记录输入、关键对象状态、输出和编译命令,并用规则 deduction follows context 解释结果;严格边界为不得把“类型推导与auto”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《概念约束与requires》的输入或约束。
  • 概念约束与requires:规则 constraints reject invalid operations;实验任务为写一个能编译运行的最小程序展示“概念约束与requires”,记录输入、关键对象状态、输出和编译命令,并用规则 constraints reject invalid operations 解释结果;严格边界为不得把“概念约束与requires”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《特化、重载和选择》的输入或约束。
  • 特化、重载和选择:规则 selection chooses most suitable candidate;实验任务为写一个能编译运行的最小程序展示“特化、重载和选择”,记录输入、关键对象状态、输出和编译命令,并用规则 selection chooses most suitable candidate 解释结果;严格边界为不得把“特化、重载和选择”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《编译期计算入门》的输入或约束。
  • 编译期计算入门:规则 constexpr permits compile-time evaluation;实验任务为写一个能编译运行的最小程序展示“编译期计算入门”,记录输入、关键对象状态、输出和编译命令,并用规则 constexpr permits compile-time evaluation 解释结果;严格边界为不得把“编译期计算入门”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《泛型算法实验》的输入或约束。
  • 泛型算法实验:规则 generic code states semantic requirements;实验任务为写一个能编译运行的最小程序展示“泛型算法实验”,记录输入、关键对象状态、输出和编译命令,并用规则 generic code states semantic requirements 解释结果;严格边界为不得把“泛型算法实验”只写成语法模板;必须说明类型、所有权/生存期、失败输入、复杂度或并发可见性中与本节有关的边界;本节产物将作为《vector与连续存储》的输入或约束。

实验闭环

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

复盘

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