Professional Documents
Culture Documents
01
01
前言
- **语言构件到硬件设施的直接映射**
- **零开销抽象**
- 你不用的东西,你就不需要付出代价(“没有散落在各处的赘肉”)。
- 你使用的东西,你手工写代码也不会更好。
抽象在代码中体现为函数、类、模板、概念和别名。
- 语言
- 标准库
- 许多的其他库
- 庞大的——常常是旧的——代码库
- 工具(包括其他语言)
- 教学和培训
- 社区支持
只要有可能,只要合适,我就会考虑这些组成部分之间的相互作用。
有一种流传广泛的谬见,就是程序员希望他们的语言是简单的。当你不得不学习一门新的语言、不得不设计一门
编程课程、或是在学术论文中描述一门语言时,追求简单显然是实情。对于这样的用途,让语言干净地体现一些
明确的原则是一个明显的优势,也是理想情况。当开发人员的焦点从学习转移到交付和维护重要的应用程序时,
他们的需求从简单转移到全面的支持、稳定性(兼容性)和熟悉度。人们总是混淆熟悉度和简单,如果可以选择
的话,他们更倾向于熟悉度而不是简单。
看待 C++ 的一种方式是,把它看成几十年来三种相互矛盾的要求的结果:
- **让语言更简单!**
- **立即添加这两个必要特性!!**
- **不要搞砸我的(任何)代码!!!**
我添加了感叹号,因为这些观点的表达常常带着不小的情绪。
我想让简单的事情简单做,并确保复杂的事情并非不可能,也不会没有必要地难。前者对于不是语言律师的开发
者来说是必不可少的;后者对于基础性代码的实现者是必要的。稳定是所有意图持续运行几十年的系统的基本属
性,然而一种活的语言必须适应不断变化的世界。
## 1.1 年表
为了给出一个快速的概述,这里有一个粗略的年表。如果你不熟悉 C++,很多术语、构件、库都会晦涩难懂;大
多数在以前的 HOPL 论文 [Stroustrup 1993, 2007] 或本文中有详细解释。
## 1.2 概述
- [§1](#1-前言):前言
- [§2](02.md#2-背景 c-的-19792006):背景:C++ 的 1979–2006
- [§3](03.md#3-c-标准委员会):C++ 标准委员会
- [§4](04.md#4-c11 感觉像是门新语言):C++11:感觉像是门新语言
- [§5](05.md#5-c14 完成-c11):C++14:完成 C++11
- [§6](06.md#6-概念):概念
- [§7](07.md#7-错误处理):错误处理
- [§8](08.md#8-c17 大海迷航):C++17:大海迷航
- [§9](09.md#9-c20 方向之争):C++20:方向之争
- [§10](10.md#10-2020-年的-c):2020 年的 C++
- [§11](11.md#11-回顾):回顾
如果一个主题跨越了一段较长的时间,比如“概念”和标准化流程,我会把它放在一个地方,让内容优先于时间
顺序。