一个聊点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,它主要提供以下的特性:
类
派生类
公有/私有的访问控制
构造器和析构器
调用和返回函数
友元类
类型检查和函数参数的转换
内联函数
默认参数
赋值操作符重载
看到这里,大家都会产生一个疑问,为什么是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++的特性有:
虚函数
函数重载和操作符重载
引用
常量
用户控制的动态内存控制
增强的类型检查
在1985年,Cfront 1.0 版本发布,这是第一个商业版本。
在1989年,Cfront 2.0 版本发布,新增的特性有
多继承
类型安全的链接
更好的重载函数解析
赋值和初始化的递归定义
使用户可以更好的使用用户自定义的内存管理
抽象类
静态成员函数
常量成员函数
受保护的成员(1.2版本发布)
->的重载
指向成员的指针
在这之后,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++的公众号的主要内容,如果未能解决你的问题,请参考以下文章