《Learn C++》笔记 C++目录
《Learn C++》笔记 C++目录
LearnCpp.com 是一个免费网站,致力于教你如何用现代 C++ 编程。本网站的课程将引导你完成编写、编译和调试 C++ 程序所需的所有步骤。无需任何编程经验,但各个级别的程序员都能从我们的最佳实践、技巧和见解中获益。
成为专家并非一朝一夕之功,但只要有点耐心,你终会达成目标。LearnCpp.com 将为你指明方向。
简介/入门指南
- 0.1 本教程介绍
- 0.2 程序和编程语言介绍
- 0.3 C/C++ 介绍
- 0.4 C++开发介绍
- 0.5 编译器、链接器和库的介绍
- 0.6 安装集成开发环境(IDE)
- 0.7 编译你的第一个程序
- 0.8 一些常见的 C++ 问题
- 0.9 配置编译器:构建配置
- 0.10 配置编译器:编译器扩展
- 0.11 配置编译器:警告和错误级别
- 0.12 配置编译器:选择语言标准
- 0.13 我的编译器使用的是哪种语言标准?
第一章 C++基础
- 1.1 程序的语句和结构
- 1.2 注解
- 1.3 对象和变量介绍
- 1.4 变量赋值与初始化
- 1.5 iostream 介绍:cout、cin 和 endl
- 1.6 未初始化的变量和未定义行为
- 1.7 关键词和命名标识符
- 1.8 空白和基本格式
- 1.9 字面量和运算符介绍
- 1.10 表达式介绍
- 1.11 开发你的第一个程序
- 1.x 第一章概要及测验
第二章 C++基础:函数和文件
- 2.1 函数介绍
- 2.2 函数返回值(返回值的函数)
- 2.3 Void函数(不返回值的函数)
- 2.4 函数形参和实参介绍
- 2.5 局部作用域介绍
- 2.6 函数为何有用,以及如何有效使用它们
- 2.7 前向声明与定义
- 2.8 包含多个代码文件的程序
- 2.9 命名冲突及命名空间介绍
- 2.10 预处理器介绍
- 2.11 头文件
- 2.12 头文件保护机制
- 2.13 如何设计你的第一个程序
- 2.x 第二章总结和测验
第三章 C++程序调试
- 3.1 语法和语义错误
- 3.2 调试过程
- 3.3 调试策略
- 3.4 基础调试策略
- 3.5 更多调试策略
- 3.6 使用集成调试器:单步执行
- 3.7 使用集成调试器:运行和断点
- 3.8 使用集成调试器:监视变量
- 3.9 使用集成调试器:调用栈
- 3.10 在问题出现之前发现它们
- 3.x 第三章总结和测验
第四章 基本数据类型
- 4.1 基本数据类型介绍
- 4.2 Void
- 4.3 对象大小和 sizeof 运算符
- 4.4 有符号整数
- 4.5 无符号整数以及其应避免使用的原因
- 4.6 固定宽度整数和 size_t
- 4.7 科学计数法介绍
- 4.8 浮点数
- 4.9 布尔值
- 4.10 if语句介绍
- 4.11 字符
- 4.12 类型转换和 static_cast 介绍
- 4.x 第四章总结和测验
第五章 常量和字符串
- 5.1 常量变量(命名常量)
- 5.2 字面量
- 5.3 数制(十进制、二进制、十六进制和八进制)
- 5.4 假设规则与编译时优化
- 5.5 常量表达式
- 5.6 constexpr 变量
- 5.7 std::string 介绍
- 5.8 std::string_view 介绍
- 5.9 std::string_view(第二部分)
- 5.x 第五章总结和测验
第六章 操作符
- 6.1 运算符优先级和结合性
- 6.2 算术运算符
- 6.3 余数和幂运算
- 6.4 递增/递减运算符及其副作用
- 6.5 逗号运算符
- 6.6 条件运算符
- 6.7 关系运算符和浮点数比较
- 6.8 逻辑运算符
- 6.x 第六章总结和测验
第O章 位操作(可选章节)
- O.1 通过 std::bitset 进行位标志和位操作
- O.2 位运算符
- O.3 使用位运算符和位掩码进行位操作
- O.4 二进制和十进制之间的整数转换
第七章 范围、持续时间和关联性
- 7.1 复合语句(代码块)
- 7.2 用户定义的命名空间和作用域解析运算符
- 7.3 局部变量
- 7.4 全局变量介绍
- 7.5 变量遮蔽(名称隐藏)
- 7.6 内部链接
- 7.7 外部链接和变量前向声明
- 7.8 为何(非常量)全局变量是邪恶的
- 7.9 内联函数和变量
- 7.10 在多个文件中共享全局常量(使用内联变量)
- 7.11 静态局部变量
- 7.12 作用域、存储期和链接总结
- 7.13 using声明和using指令
- 7.14 未命名和内联命名空间
- 7.x 第七章总结和测验
第八章 控制流
- 8.1 控制流介绍
- 8.2 if语句和代码块
- 8.3 常见的if语句问题
- 8.4 constexpr if语句
- 8.5 switch语句基础
- 8.6 switch语句的贯穿和作用域
- 8.7 goto 语句
- 8.8 循环和 while 语句介绍
- 8.9 do while 语句
- 8.10 for 语句
- 8.11 break和continue
- 8.12 halt(提前退出程序)
- 8.13 随机数生成介绍
- 8.14 使用梅森旋转算法生成随机数
- 8.15 全局随机数(Random.h)
- 8.x 第八章总结和测验
第九章 错误检测与处理
- 9.1 代码测试介绍
- 9.2 代码覆盖率
- 9.3 C++中常见的语义错误
- 9.4 检测和处理错误
- 9.5 std::cin 和处理无效输入
- 9.6 断言和静态断言
- 9.x 第九章总结及测验
第十章 类型转换、类型别名和类型推导
- 10.1 隐式类型转换
- 10.2 浮点数和整数提升
- 10.3 数值转换
- 10.4 窄化转换、列表初始化和 constexpr 初始化器
- 10.5 算术转换
- 10.6 显式类型转换(强制转换)和 static_cast
- 10.7 类型定义和类型别名
- 10.8 对使用 auto 关键字对对象进行类型推导
- 10.9 函数类型推导
- 10.x 第十章总结和测验
第十一章 函数重载和函数模板
- 11.1 函数重载介绍
- 11.2 函数重载的区分
- 11.3 函数重载解析和歧义匹配
- 11.4 删除函数
- 11.5 默认实参
- 11.6 函数模板
- 11.7 函数模板实例化
- 11.8 具有多个模板类型的函数模板
- 11.9 非类型模板形参
- 11.10 在多个文件中使用函数模板
- 11.x 第十一章总结和测验
第F章 Constexpr 函数
- F.1 constexpr 函数
- F.2 constextpr 函数(第 2 部分)
- F.3 constexpr 函数(第 3 部分)和 consteval
- F.4 constextpr 函数(第 4 部分)
- F.x F 章总结和测验
第十二章 复合类型:引用和指针
- 12.1 复合数据类型介绍
- 12.2 值类别(左值和右值)
- 12.3 左值引用
- 12.4 常量左值引用
- 12.5 按左值引用传递
- 12.6 按常量左值引用传递
- 12.7 指针介绍
- 12.8 空指针
- 12.9 指针和常量
- 12.10 按地址传递
- 12.11 按地址传递(第二部分)
- 12.12 按引用返回和按地址返回
- 12.13 输入和输出形参
- 12.14 使用指针、引用和 const 进行类型推导
- 12.15 std::optional
- 12.x 第十二章总结和测验
第十三章 复合类型:枚举和结构
- 13.1 程序定义(用户定义)类型介绍
- 13.2 无作用域枚举
- 13.3 无作用域枚举器整型转换
- 13.4 枚举与字符串之间的转换
- 13.5 I/O 运算符重载介绍
- 13.6 作用域枚举(枚举类)
- 13.7 结构体、成员和成员选择简介
- 13.8 结构聚合初始化
- 13.9 默认成员初始化
- 13.10 传递和返回结构体
- 13.11 结构杂项
- 13.12 使用指针和引用进行成员选择
- 13.13 类模板
- 13.14 类模板参数推导(CTAD)和推导指南
- 13.15 别名模板
- 13.x 第十三章总结和测验
- 13.y 使用语言参考
第十四章 class介绍
- 14.1 面向对象编程介绍
- 14.2 类简介
- 14.3 成员函数
- 14.4 const类对象和const成员函数
- 14.5 共有和私有成员以及访问限定符
- 14.6 访问函数
- 14.7 返回对数据成员的引用的成员函数
- 14.8 数据隐藏(封装)的优势
- 14.9 构造函数介绍
- 14.10 构造函数成员初始化列表
- 14.11 默认构造函数和默认参数
- 14.12 委托构造函数
- 14.13 临时类对象
- 14.14 复制构造函数介绍
- 14.15 类初始化和复制省略
- 14.16 转换构造函数和显式关键字
- 14.17 Constexpr 聚合和类
- 14.x 第十四章总结和测验
第十五章 更多class信息
- 15.1 隐藏的“this”指针和成员函数链式调用
- 15.2 类和头文件
- 15.3 嵌套类型(成员类型)
- 15.4 析构函数介绍
- 15.5 带有成员函数的类模板
- 15.6 静态成员变量
- 15.7 静态成员函数
- 15.8 友元非成员函数
- 15.9 好友类和友元成员函数
- 15.10 引用限定符
- 15.x 第十五章总结和测验
第十六章 动态数组:std::vector
- 16.1 容器和数组介绍
- 16.2 std::vector 和 list 构造函数介绍
- 16.3 std::vector 和无符号长度及下标问题
- 16.4 传递 std::vector
- 16.5 返回 std::vector及移动语义介绍
- 16.6 数组和循环
- 16.7 数组、循环和符号挑战解决方案
- 16.8 基于范围的 for 循环(for-each)
- 16.9 使用枚举器进行数组索引和长度操作
- 16.10 std::vector 动态调整大小和容量
- 16.11 std::vector 和堆栈的行为
- 16.12 std::vector
- 16.x 第十六章总结和测验
第十七章 固定大小数组:std::array 和 C 风格数组
- 17.1 std::array 介绍
- 17.2 std::array 的长度和索引
- 17.3 传递和返回 std::array
- 17.4 std::array 类型及花括号省略
- 17.5 通过 std::reference_wrapper 实现引用数组
- 17.6 std::array 和枚举
- 17.7 C 风格数组介绍
- 17.8 C 风格数组衰减
- 17.9 指针运算和下标
- 17.10 C 风格字符串
- 17.11 C 风格字符串符号常量
- 17.12 多维 C 风格数组
- 17.13 多维 std::array
- 17.x 第十七章总结和测验
第十八章 迭代器和算法
- 18.1 使用选择排序对数组进行排序
- 18.2 迭代器介绍
- 18.3 标准库算法介绍
- 18.4 代码计时
第十九章 动态分配
- 19.1 使用 new 和 delete 进行动态内存分配
- 19.2 动态分配数组
- 19.3 析构函数
- 19.4 指针的指针和动态多维数组
- 19.5 空指针
第二十章 函数
- 20.1 函数指针
- 20.2 栈和堆
- 20.3 递归
- 20.4 命令行参数
- 20.5 省略号(以及为什么要避免使用省略号)
- 20.6 引入lambda 表达式(匿名函数)
- 20.7 Lambda 捕获
- 20.x 第20章总结和测验
第二十一章 运算符重载
- 21.1 运算符重载介绍
- 21.2 使用友元函数重载算术运算符
- 21.3 使用普通函数重载运算符
- 21.4 重载I/O操作符
- 21.5 使用成员函数重载运算符
- 21.6 重载一元运算符 +、- 和 !
- 21.7 重载比较运算符
- 21.8 重载递增和递减运算符
- 21.9 重载下标运算符
- 21.10 重载括号运算符
- 21.11 重载类型转换
- 21.12 重载赋值运算符
- 21.13 浅拷贝与深拷贝
- 21.14 运算符重载和函数模板
- 21.x 第二十一章概要与测验
- 21.y 第二十一章项目
第二十二章 移动语义和智能指针
- 22.1 智能指针和移动语义介绍
- 22.2 R 值引用
- 22.3 移动构造函数和移动赋值
- 22.4 std::move
- 22.5 std::unique_ptr
- 22.6 std::shared_ptr
- 22.7 std::shared_ptr 和 std::weak_ptr 的循环依赖问题
- 22.x 第二十二章总结和测验
第二十三章 对象关系
- 23.1 对象关系
- 23.2 组合
- 23.3 聚合
- 23.4 关联
- 23.5 依赖
- 23.6 容器类
- 23.7 std::initializer_list
- 23.x 第二十三章总结和测验
第二十四章 继承
- 24.1 继承介绍
- 24.2 C++中的基本继承
- 24.3 派生类的构造顺序
- 24.4 派生类的构造函数与初始化
- 24.5 继承和访问限定符
- 24.6 为派生类添加新功能
- 24.7 调用继承函数与覆盖行为
- 24.8 隐藏继承的功能
- 24.9 多重继承
- 24.x 第24章总结和测验
第二十五章 虚函数
- 25.1 指向派生对象基类的指针和引用
- 25.2 虚函数和多态性
- 25.3 覆盖和最终说明符,以及协变返回类型
- 25.4 虚析构函数、虚赋值和覆盖虚化
- 25.5 早期绑定和晚期绑定
- 25.6 虚表
- 25.7 纯虚函数、抽象基类和接口类
- 25.8 虚基类
- 25.9 对象切片
- 25.10 动态转化
- 25.11 使用operator«打印继承类
- 25.x 第二十五章总结和测验
第二十六章 模板和类
- 26.1 模板类
- 26.2 模板非类型参数
- 26.3 函数模板特化
- 26.4 类模板特化
- 26.5 部分模板特化
- 26.6 指针的部分模板特化
- 26.x 第26章总结和测验
第二十七章 异常情况
- 27.1 异常情况的必要性
- 27.2 基本异常处理
- 27.3 异常、函数和堆栈展开
- 27.4 未捕获的异常和捕获所有异常的处理程序
- 27.5 异常、类和继承
- 27.6 重新抛出异常
- 27.7 函数 try 块
- 27.8 异常情况的风险和弊端
- 27.9 异常规范和 noexcept
- 27.10 std::move_if_noexcept
- 27.x 第27章总结和测验
第二十八章 输入和输出(I/O)
- 28.1 输入和输出 (I/O) 流
- 28.2 使用 istream 输入
- 28.3 使用 ostream 和 ios 输出
- 28.4 字符串流类
- 28.5 流状态和输入验证
- 28.6 基本文件 I/O
- 28.7 随机文件 I/O
附录A 杂项主题
- A.1 静态库和动态库
- A.2 在 Visual Studio 中使用库
- A.3 在 Code::Blocks 中使用库
- A.4 C++常见问题解答
附录B C++ 更新
- B.1 C++11 简介
- B.2 C++14 简介
- B.3 C++17 简介
- B.4 C++20 简介
- B.5 C++23 简介
附录C 剧终
- C.1 结束了吗?
附录D 已弃用文章
- 21.1 标准库
- 21.2 STL容器概述
- 21.3 STL迭代器概述
- 21.4 STL算法概述
- 22.1 std::string 和 std::wstring
- 22.2 std::string 的构造和销毁
- 22.3 std::string 的长度和容量
- 22.4 std::string 字符访问和转换为 C 风格数组
- 22.5 std::string 赋值和交换
- 22.6 std::string 追加
- 22.7 std::string 插入
This post is licensed under CC BY 4.0 by the author.