CS106L 现代 C++:Standard C++ Programming · 开篇与课程概览

目录 · l1 →

课程:Stanford CS106L “Standard C++ Programming”(2026 春季学期) 讲师:Rachel Fernandez、Preston Seay(cs106l-spr2526-staff@lists.stanford.edu课程主页https://web.stanford.edu/class/cs106l/(存档页:https://web.stanford.edu/class/archive/cs/cs106l/cs106l.1266/上课时间:周二、周四 15:00–16:20,Thornton 110 课程性质:1 学分(S/NC),第 8 周结束正式课程,共 7 个短作业、无考试 本笔记依据:课程主页公开日程表、全部 17 份公开讲座幻灯片(PDF)、公开的课堂代码仓库(cs106l-lecture-code)与作业仓库(cs106l-assignments


课程概览(About CS106L)

课程目标与定位

🌽 CS106L 是一门深入探索现代 C++ 语言的 1 学分课程。 与 CS106B 等”用 C++ 讲概念”的课程不同,CS106L 关注的是代码本身:什么是好的、强大而优雅的 C++ 代码。课程覆盖现代 C++ 中最激动人心的特性,包括现代编程范式(直至 C++26),并只使用标准库(STL),不依赖任何 Stanford 私有库——让你真正理解 C++ 是如何被设计出来的,以及为什么。

  • 🥦 先修要求:正在学习或已学过 CS106B/X(或同等水平),即已掌握函数、对象/类等编程基础。
  • 🥕 课程形式:7 个非常简短的周作业(每个约 1–2 小时,周五发布、下周五截止,共 3 个免费晚交天数)。作业不追求难度,而是对上周课堂概念的动手练习。无考试、无论文,全部 S/NC 评分。
  • 🏢 答疑(Office Hours):对所有人开放,第 3 周开始。周四 16:30–17:20(Thornton 210)、周三 15:00–15:50(160-B37)。

为什么学 C++?

  • C++ 是”一切事物的隐形地基”:游戏引擎(Valorant、CS2)、高频交易、自动驾驶、Arduino、GPU 编程、数据库(MySQL、MongoDB)、浏览器(Chrome)、VR(Quest)、底层 ML 框架(PyTorch、TensorFlow)、编译器/虚拟机(LLVM、GCC、JVM)、操作系统(Windows、macOS、Linux)……
  • C++ 于 1985 年首次发布,至今仍稳居 TIOBE 指数前三(2026 年 3 月数据);标准每三年修订一次:C++98 → C++03 → C++11 → C++14 → C++17 → C++20 → C++23 → C++26
  • C++ 帮助养成优秀的”编码卫生”:类型检查与类型安全、引用/拷贝/移动语义下的内存效率、const 正确性——这些限制正是许多其他语言所放宽的。

C++ 设计哲学(本笔记贯穿始终的准绳)

  1. 直接在代码中表达想法与意图(express ideas and intent directly in code)。
  2. 尽可能在编译期强制安全(enforce safety at compile time whenever possible)。
  3. 不浪费时间和空间(do not waste time or space)。
  4. 封装杂乱的结构(compartmentalize messy constructs)。
  5. 把完全的控制、责任与选择权交给程序员(allow the programmer full control, responsibility, and choice)。

“Code should be elegant and efficient; I hate to have to choose between those.” —— Bjarne Stroustrup

学习方法建议

  • 本笔记每讲严格按”概述 → 核心特性与语法详解 → 代码示例与逐步解说 → 与旧标准对比 → 关键要点 → 常见陷阱 → 关联作业提示“七段式组织;代码示例均标注所需 C++ 标准(C++11/14/17/20/23/26)且尽可能可直接编译运行。
  • 建议:先通读概述与关键要点,再精读语法详解,最后动手编译运行每个代码示例,对照”特性机制解说”理解底层机制。
  • 常用参考:https://en.cppreference.com(官方标准参考,课程推荐);Godbolt Compiler Explorer(https://godbolt.org)用于观察编译产物。

课程日程表(Schedule)

周次周二(Tuesday)周四(Thursday)周五发布作业
Week 13/31 L1. Welcome!📖 Slides4/2 L2. Types & Structs📖 Slides💻 Code
Week 24/7 L3. Initialization & References📖 Slides💻 Code4/9 L4. Streams📖 Slides💻 CodeA1: SimpleEnroll
Week 34/14 L5. Containers📖 Slides💻 Code4/16 L6. Iterators & Pointers📖 Slides💻 CodeA2: Marriage Pact
Week 44/21 L7. Classes📖 Slides💻 Code4/23 L8. Optional: Inheritance Practice📖 Slides💻 CodeA3: Make a Class!
Week 54/28 L9. Class Templates & Const Correctness📖 Slides💻 Code4/30 L10. Function Templates📖 Slides💻 CodeA4: Ispell
Week 65/5 L11. Functions & Lambdas📖 Slides5/7 L12. Operator Overloading📖 Slides💻 CodeA5: Treebook
Week 75/12 L13. Special Member Functions📖 Slides💻 Code5/14 L14. Move Semantics📖 Slides💻 CodeA6: ExploreCourses
Week 85/19 L15. std::optional & Type Safety📖 Slides💻 Code5/21 L16. RAII, Smart Pointers, & Building C++ Projects📖 Slides💻 CodeA7: Unique Pointer
Week 95/26 L17. Optional Lecture: C++ Iceberg📖 Slides💻 Code5/28 无课
Week 10无课无课

作业总览(Assignments)

作业名称主题 / 考察技能说明
A1SimpleEnroll流(streams)、初始化、引用用 ExploreCourses 数据判断哪些 CS 课程本学期开设
A2Marriage PactSTL 容器、指针用容器与指针完成”配对”逻辑(含简答题)
A3Make a Class!类、头文件/源文件分离自由设计一个类(class.h / class.cpp / sandbox.cpp
A4Ispell模板、<algorithm>、ranges实现 Unix 拼写检查器核心逻辑(spellcheck)
A5Treebook运算符重载、特殊成员函数实现社交网络 User 类的 operator<<operator==、SMF 等
A6ExploreCoursesstd::optional、monadic 操作在课程数据库中查找可能不存在的 Course,返回 std::optional
A7Unique PointerRAII、智能指针、模板、移动语义从零实现一个简化版 std::unique_ptr

访问性说明:作业详细文档、练习视频、答题平台(Paperless、Ed、Canvas 内页)等需要斯坦福账号登录,未公开。本笔记主要依据课程主页公开的日程表、主题描述、公开幻灯片与公开 GitHub 代码仓库构建知识框架。