读者序

之前没有好好的阅读过一本任何技术书籍,一般都是打开前几张,然后慢慢的失去耐心,所有造成的问题是一些书籍上的知识,只会对前面的章节有记忆,而大多数的书籍前面的章节也只是他书籍的入门介绍而已,所以我是个半吊子程序员,工作两年半之后,这个问题越来越困扰着我,有时候看见别人的面帖,感觉那些问题其实都因该是知道答案的,但是当我想要在脑海中把答案整理出来的时候却无从说起,简单的来说就是有的东西我是知道的,但是无法表示出来,不成体系,这给我一个错觉就是我感觉我能力可以,但是落到实地的时候却啥也做不了,脱离了谷歌百度或者其他我之前的资料,我啥都不行。

我个人觉得问题的解决方式是学会输出,把自己的知识整理输出,通过自己让别人知道一项新技能,新知识,那就代表自己其实已经有了闹靠的基础,知识的输出需要一个载体,我不是老师,公司也没有这个渠道,因为公司的知识交流与工作内容是密切相关的,所以这也是我搭建这个博客的原因,但愿我可以长期的坚持下去,说实话,之前已经有了还几次类似的经历,但是都半途而废了,我希望这是最后一次

前言

书籍是Bjarne Stroustup为HOPL所撰写的论文,目的是介绍c++在过去到现在的发展历程,以及其中一些大的功能点的演化。促发展上来划分C++可以分为两个阶段,一是C++98之前的类C版C++,二是之后的C++11之后的现代C++,在进40年的时间里C++还没有被取代,还可以在如此多的编程语言中占据一些之地,引用Bjarne Stroustup大佬的话说就是因为他填补了编程语言中一个重要的生态位。C++的核心是直接映射硬件和林开销抽象,

  • ISO 编程语言可以分为三种,一是有公司主导的编程语言,例如Google的go,C#以及苹果的swift等,二是由社区主导如php,python等,这两种在除了显而易见的好处之外的,都有各自的问题,公司主导的语言的,可能哎公司强势的时候还可以得到发展,但是公司没落之后,语言没有支持可能就无了,还有那家公司主导,那语言就是那家公司的产品,技术上的map由公司指定,小公司没有能力可以影响到语言的后续发展,对于社区,则可能会由于没有一个核心的个人或者组织来引导方向,导致语言偏离最初顶下的发展道路。Bjarne Stroustup就是基于以上的原因,提出组建一个标准委员会来引导C++ 的发展,

  • 语言特性 具体的定义的语言的规则,有对应的具体的实现

1. 起源

  • C++核心特性

    1. 语言到设备之间的直接映射
    2. 零开销抽象
      • 不使用的东西就不需要付出任何代价
      • 使用到的东西就是可以实现的最好的
      • 抽象具体为类,函数,模板,概念和别名
  • simula 最早的面向对象的语言,之后几乎所有的面向对象的语言都是直接或者间接的受奥他的印象。

C++最初是在1979年推出的,那时候是真正的带类的C。 Bjarne Stroustup的目的是想要一个可以直接映射硬件,同时又有类似于simula的具有抽象能力的语言,那是一个实验性质的语言的,实现就是把编码从C++逐行翻译到C,之后的1982年,随着人数的增加,他重写了前端,实现了一个功能完整的编译器,但是实际上在代码生成的是时候,还是生成的是C,

之后就是平稳的发展到推出98版本的C++,不考虑最近的一些新特性的话,我们大部分人的C++ 知识就到这里了。此时C++实现了

  • 多态
  • 运算符重载
  • 类型安全连接
  • 抽象类
  • 模板 更好的泛型编程。大佬最初的时候使用宏实现的泛型编程
  • 异常
  • RAII
  • *_cast
  • bool
  • STL标准库 上述就是最初的98的C++实现的功能点,实际上也是大多是C++的开发人员知道的最详细的C++知识。之后就是漫长过渡期,直到11版本的推出,使C++进入新时代,
  • 06年单核处理器新能几乎不再提升,所以大部分应用开始寻找可以提升性能的编程语言,

C++11 新时代

许多新的特性的引入,使得C++类似一个新语言 特性如下

  • 内存模型 高效的为现代硬件设计的底层抽象,描述并发的基础,
  • auto|declytype
  • range for 更好的遍历容器
  • 移动语义和右值引用
  • 统一初始化
  • nullptrt
  • constexpr
  • 用户自定义字面量
  • 原始字符串字面量
  • 属性
  • lambda表达式
  • 变参模板
  • 模板别名
  • noexcept
  • override和final
  • static_assert
  • longlong
  • 默认成员初始化
  • enum class

组件如下

  • 智能指针 unique_ptr和shared_ptr
  • atomic
  • thread库
  • future,promise等
  • tuple
  • type trait
  • 正则
  • 随机数
  • 时间
  • 容器

上面的东西就是后续C++在98 的基础上推出的新11功能点,在我自己写这边文档的时候,其实有些东西我是没概念的😂,这些看似不相关的东西,可以分为下面的几个大的主题

  1. 并发支持
  2. 简化使用
  3. 泛型编程的改进
  4. 增加静态类型的安全
  5. 支持对库的开发
  6. 标准库组件

1. 并发支持