一个聊点C++的公众号

Posted 无敌的cpp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个聊点C++的公众号相关的知识,希望对你有一定的参考价值。


      C++的作者是Bjarne Stroustrup。他的博士论文是研究分布式系统的系统软件组织的替代方案,需要写一个模拟软件运行在分布式系统上的仿真器。最初这个仿真器是使用Simula写的,在写的过程中,Bjarne惊喜于Simula的类的概念和类型系统,但是,Simula编译链接的性能糟糕,垃圾回收占用了大量的时间。总之,用Simula实现的仿真器不能满足其要求。后来,Bjarne又使用了BCPL重写了仿真器,使用BCPL写代码和调试代码的经历对Bjarne来说是非常糟糕的。幸运的是,该仿真器最终给出了一系列有用的结果,并澄清了很多问题。


      这段经历让Bjarne开始意识到不能使用不合适的工具来处理问题,并开始思考什么样的工具才是一个合适的工具。


      后来,也就是1979年,Bjarne进入了贝尔实验室,他的工作是分析UNIX的内核来确定通过局域网连接的计算机能被分布到什么程度。基于前边对于仿真器开发的郁闷经历,以及对合适的工具的思考,Bjarne决定自己开发一个合适的工具。最开始,Bjarne实现了一个预处理器,它可以将Simula的类概念加入到C语言中。后续又做了一些其他的修改。在开发这个工具的过程中,Bjarne逐渐有了将工具变为编程语言的想法。


      该编程语言最初实现的版本还不叫C++,而是C with Classes,它主要提供以下的特性:

  1. 派生类

  2. 公有/私有的访问控制

  3. 构造器和析构器

  4. 调用和返回函数

  5. 友元类

  6. 类型检查和函数参数的转换

  7. 内联函数

  8. 默认参数

  9. 赋值操作符重载


      看到这里,大家都会产生一个疑问,为什么是C with Classes, 而不是Pascal with Classes或者其他什么语言。Bjarne给出的解释是C语言灵活,高效,很多计算机上都有C编译器和容易移植的。


      C with Classes一开始是作为新语言的名字的,但是这个名字可能给C的名字带来了一些问题,Bjarne的管理层礼貌地要求其将名字改为C84。这个名字不怎么样,Bjarne开始寻求一个更好的名字,并最终选定了C++。不得不说,这真的是个好名字。这个名字来自Rick Mascitti,并且在1983年首次使用。


       在1982年到1984年间,C++的目标开始变得远大,Bjarne开始想要把C++从C中独立出来,为了这个目标,Bjarne实现了一个新的编译器前端,CFront,它的作用是把C++代码转换成C代码,并能通过C编译器的编译。

过程如下:


这段时间新添加到C++的特性有:

  1. 虚函数

  2. 函数重载和操作符重载

  3. 引用

  4. 常量

  5. 用户控制的动态内存控制

  6. 增强的类型检查


在1985年,Cfront 1.0 版本发布,这是第一个商业版本。


在1989年,Cfront 2.0 版本发布,新增的特性有 

  1. 多继承

  2. 类型安全的链接

  3. 更好的重载函数解析

  4. 赋值和初始化的递归定义

  5. 使用户可以更好的使用用户自定义的内存管理

  6. 抽象类

  7. 静态成员函数

  8. 常量成员函数

  9. 受保护的成员(1.2版本发布)

  10. ->的重载

  11. 指向成员的指针


      在这之后,C++又添加了模板和异常处理。


      从20世纪90年代早期开始,大家开始为C++建立一个标准,ANSI C++在1989年被建立,在1991年,它成为ISO的一部分。在C++98标准之前,委员会一年开三次会,每次一周。在这之后,它一年开两次会议,大多数时间里,组委会成员通过邮件进行沟通。


      成立了委员会之后,C++的演进变得规范有序。


      C++ 98 标准:这是C++的第一个标准,它规定了C++基本的语言结构,STL和其他的标准库


      C++03 修正:C++ 03 是对C++98的一个修正,它修正了92个核心语言缺陷和125个库缺陷,只包含了一个新的特性:值的初始化。


      从C++11开始,C++标准开始了3年一更新的节奏。


      C++11 标准:C++ 11 应该算是Modern C++的开始,是C++的第二个大版本,这个版本一方面保持C++的Zero Cost Abstraction和Direct Map To Hardware,另一方面使得C++初学者更容易上手。C++11 是C++的一个重要的转折点,某种程度上使C++重回大众的视野。新特性移动语义,右值引用和新的类型推导规则备受广大C++程序员青睐。


        C++14 标准:由于C++11提供的新特性太多,C++14变成了C++11的Bug Fix版本,类似于C++03,它是C++11的一个修正,主要的特性修改集中在lambda表达式和变量模板。


       C++17 标准:C++17 也新增了大量新的特性,包括fold-expression,structured bindings,filesystem 和PMR等,不断提高C++的易用性和运行时的效率。


     C++20 标准:C++20 推出了Big Four:(1)简化模板元编程的Concepts (2)提高容器易用性的Range(3)提高编译速度的Modules(4)可以被挂起的函数Coroutines。这几个特性,解决了长久以来困扰C++开发者的问题:include机制导致编译期的性能低下,模板报错时信息复杂且不明确,难以定位。感觉C++20又是一个令人瞩目的版本。


        C++23 标准:仍在进行中...


       作为一个C++程序员,衷心的希望C++能够变大越来越好,毕竟,还指着它养家糊口。



参考:


[1] A History of C++: 1979−1991 (https://stroustrup.com/hopl2.pdf)


[2] Evolving a language in and for the real world: C++ 1991-2006  (https://stroustrup.com/hopl-almost-final.pdf)


[3] Thriving in a Crowded and Changing World: C++ 2006–2020  (https://dl.acm.org/doi/pdf/10.1145/3386320)


以上是关于一个聊点C++的公众号的主要内容,如果未能解决你的问题,请参考以下文章

一个Linux/C/C++领域的优质原创公众号分享给你

微信公众号网页开发

如何抓取微信所有公众号最新文章

微信公众号怎么退出

微官网是微信公众号还是其他啥的,公司想开一个,怎么弄?

公众号开发-----准备工作