前言
本文是Bjarne Stroustrup的HOPL4论文 笔记及拓展(目录) 的起始篇。
C++的理念
C++被设计出来到底是为了回答什么样的问题呢?
- 如何直接操纵硬件?
- 同时支持高效,高级的抽象?
C++在1980年代仅仅是一个基于C和Simula语言功能的组合,经过多年的发展,C++与其他编程语言的决定性区别有两方面:
- 语言结构到硬件设备的直接映射
- 零开销抽象
关于零开销抽象是这样被描述的:
- 你不用的东西,你就不需要付出代价(也称为“没有分布式脂肪”)
- 你使用的东西,你手动写代码也不会更好
抽象在代码中表示为函数,类,模板,概念和别名。
C++主要是一种工业语言,一种构建系统的工具。对于用户来说,C++不仅仅是一种由规范定义的语言,它是由许多部分组成的工具集的一部分:
- 语言
- 标准库
- 庞大的 常常是旧的 代码库
- 工具 包括其他语言
- 教学和培训
- 社区支持
对于简单的事情简单做,并确保复杂的事情并非不可能或没有必要地难。
年表
- 1979年:工作始于“带类的C”,它变成了C++,拥有了第一个非研究性用户。
– 语言:class,构造函数/析构函数,public/private,简单继承,函数参数类型检查
– 库:task(协程和仿真),用宏参数化定义的vector - 1985年:C++的首次商业发行
– 语言:virtual函数,运算符重载,引用,常量
– 库:complex算法,流输入输出 - 1989-91年:ANSI和ISO标准化开始
– 语言:抽象类,多重继承,异常,模板
– 库:输入输出流 - 1998年:C++98,第一个ISOC++标准
– 语言:namespace,具名类型转换(非C风格的转换),bool,dynamic_cast
– 库:STL(容器和算法),string,bitset - 2011年:C++11
– 语言:内存模型,auto,范围for,constexpr,lambda表达式,用户定义字面量…
– 库:thread和锁,future,unique_ptr,shared_ptr,array,时间和时钟,随机数,无序容器(哈希表)… - 2014年:C++14
– 语言:泛型lambda表达式,constexpr函数中的局部变量,数字分隔符…
– 库:用户自定义字面量… - 2017年:C++17
– 语言:结构化绑定,变量模板,模板参数化的构造函数推导…
– 库:文件系统,scoped_lock,shared_mutex(读写锁),any,variant,optional,string_view… - 2020年:C++20
– 语言:concept,module,协程,三路比较,改进对编译期计算的支持…
– 库:概念,范围,日期和时区,span,格式,改进的并发和并行执行…