C++的演化历史

C++是一门这样的编程语言:

  • 兼顾底层计算机硬件系统和高层应用抽象机制
  • 从实际问题出发,注重零成本抽象、性能、可移植性、与C兼容
  • 语言特性和细节很多,学习成本较高,是一门让程序员很难敢说精通的语言

C++是自由的,支持5种编程风格:

  • 面向过程编程
  • 数据抽象编程
  • 面向对象编程
  • 泛型编程
  • 函数式编程

C++的重要历史阶段

纵观C++的整个发展和演化的历史,C++经历了5个重要的时期:

  • C with classes: 站在C语言的肩膀上
  • 标准化前的C++: C++正式问世,不断演化,走向标准化之路
  • C++98: 第一个国际标准化的版本
  • C++11: Modern C++
  • C++20: 感觉像一门新的编程语言

1979 - 1981: C with classes

  • 在C语言的基础上,开始了「带类的C」的尝试
  • 这个阶段的C++没有被看作是一门新的编程语言,也没有C++这个名字,只是一个更好的C
  • 这个时期最重要的是引入了Simula语言的类和继承的概念,使用Cpre预处理器实现
      • class是一种类型扩展机制,可以让程序员自定义数据类型
      • 用户自定义的数据类型和内置基本数据类型一样,是语言的「第一等公民」
      • 权限控制只有public和private,没有protected
      • 支持构造函数和析构函数
      • 支持调用函数和返回函数
    • 单继承
    • 内联函数
    • 友元类
    • 函数参数类型检查
    • 函数默认参数
    • 赋值运算符重载
    • 支持new和delete运算符
    • 改进了C中不友好的语法
      • 函数形参的类型声明
      • 结构体变量的定义
  • 早期的指导思想
    • 与C语言兼容
      • C的语言特性均可用
      • 对象的内存布局和C结构体一致
      • 使用和C一样的链接模型
    • 比C语言提供更高层的抽象机制
      • 让程序员更加容易表达设计意图和组织更大规模的代码
    • 性能、可移植性要和C一样好
      • 不使用垃圾回收机制
      • 实现语言特性的成本不能过高

1982 - 1985: Cfront 1.0

  • 从1982年开始,C++开始定位作为一个新的编程语言,使用编译技术重新实现了「带类的C」,对应的编译器为Cfront
  • 1983年底,C++正式被命名
  • Cfront的工作原理:将C++代码先通过Cfront翻译为C代码,然后通过C编译器进行编译和链接
  • 这个时期的C++语言特性和「C with classes」一致,主要支持面向过程、数据抽象的编程风格
  • 1985年,Cfront 1.0发布
  • 1985年,《The C++ Programming Language》第一版发布

1986 - 1989: Cfront 2.0

  • 从1986年开始,C++开始引入一些重要的语言特性,让C++明显区别于C
    • 虚函数
      • 虚函数的引入,对C++意义重大
      • 让C++正式支持了面向对象的编程风格
      • 让程序员有了更强大的设计意图表达工具
    • 函数和运算符重载
    • 引用
    • const
    • 类级的new和delete运算符重载
    • 改进的静态类型检查
    • 引入新的注释//
    • 多重继承
    • protected访问
    • static静态成员
    • const成员
    • 指向成员的指针
    • 去掉调用函数和返回函数
    • 1987年,C++ support in GCC 1.15.3
    • 1989年,Cfront 2.0发布

1990 - 1993: Cfront 3.0

  • 1990年,《The Annotated C++ Reference Manual》发布
  • 引入了C++高级特性,让C++作为一个编程语言趋于完善
    • 命名空间
    • 异常
    • 模板
      • 让C++支持了泛型编程风格
      • 对标准库STL的实现至关重要
    • 嵌套类
  • 1991年, Cfront 3.0发布
  • 1991年,《The C++ Programming Language》第二版发布
  • 1993年, Cfront退出了历史舞台

1998: C++98

  • ISO/IEC 14882:1998
  • C++标准委员会发布了C++语言的第一个国际标准
  • 确定了C++的核心语言特性和标准库STL
  • 引入的新语言特性
    • 运行时类型识别RTTI
    • mutable
    • bool
    • declarations in conditions
    • template instantiations
    • member templates
    • export
  • 1998年,《The C++ Programming Language》第三版发布

2003: C++03

  • ISO/IEC 14882:2003
  • C++98的修订版本
  • 引入新的语言特性
    • value initialization

2011: C++11

  • ISO/IEC 14882:2011
  • 正式迈进新时代:现代C++
  • C++也进入了一个新的快速发展期,每3年发布一个版本
  • 2013年,《The C++ Programming Language》第四版发布
  • 引入了很多新的语言特性
    • 类型推导: auto、decltype
    • 右值引用和移动语义
    • 变参模板
    • std::function & std::bind & lambda表达式和后置返回值
    • 智能指针
      • c++11引入了三种智能指针:
        • std::shared_ptr
        • std::weak_ptr
        • std::unique_ptr
    • constexpr
    • static_assert
    • 类机制完善
      • 移动构造函数和赋值运算符重载函数
      • 支持=default和=delete,完善编译器自动生成函数的控制
      • 支持explicit
      • 委托构造
      • 继承构造
      • 支持final,完善继承
      • 支持override,完善虚函数
    • range-for(基于范围的for循环)
    • enum class
    • nullptr
    • 新增内置数据类型:long long、char16_t、char32_t
    • 类内初始化
    • 统一初始化
    • using定义类型别名
    • noexcept
    • thread_local
    • 列表初始化
    • etc.
  • 完善了标准库STL
    • 重新实现了STL的数据结构和算法
    • 新增散列表和集合std::unordered_map、std::unordered_set
    • 新增元组std::tuple、单向链表std::forward_list、数组std::array
    • 移动函数std::move
    • 完美转发std::forward
    • 智能指针std::unique_ptr、std::shared_ptr、std::weak_ptr
    • 回调函数std::function、std::bind
    • 多线程std::thread
    • 多线程同步std::mutex、std::condition_variable、std::lock_guard、std::unique_lock
    • 异步任务std::promise、std::future、std::packaged_task、std::async
    • 原子操作std::atomic
    • 时间函数std::chrono
    • 初始化列表std::initialize_list
    • 模板元编程type_traits
    • 正则表达式std::regex
    • 随机数生成random
    • etc.

2014: C++14

  • ISO/IEC 14882:2014
  • C++11的修订版本
  • 完善C++11的语言特性
    • variable templates
    • generic lambdas
    • lambda init-capture
    • new/delete elision
    • relaxed restrictions on constexpr functions
    • binary literals
    • digit separators
    • return type deduction for functions
    • aggregate classes with default non-static member initializers.
  • 完善标准库STL
    • std::make_unique
    • std::shared_timed_mutex and std::shared_lock
    • std::integer_sequence
    • std::exchange
    • std::quoted
    • and many small improvements to existing library facilities, such as
      • two-range overloads for some algorithms
      • type alias versions of type traits
      • user-defined literals for basic_string, duration and complex
      • etc.

2017: C++17

  • ISO/IEC 14882:2017
  • 一个C++11的重要补充版本,引入了不少新的特性
    • 构造函数模板推导
    • 结构化绑定
    • if-switch语句初始化
    • 内联变量
    • 折叠表达式
    • constexpr lambda表达式
    • namespace嵌套
    • __has_include预处理表达式
    • 在lambda表达式用*this捕获对象副本
    • 新增Attribute
    • 字符串转换
    • std::variant
    • std::optional
    • std::any
    • std::apply
    • std::make_from_tuple
    • as_const
    • std::string_view
    • file_system
    • std::shared_mutex

2020: C++20

  • ISO/IEC 14882:2020
  • 一个比肩C++11的重大版本
  • 全新的语言特性,让C++20看起来更加符合现代化的特征
    • module
      • 改变程序的组织方式
      • 加快编译速度
    • concept
      • 增强了模板的设计表达能力,让模板更好用了
      • 模板的错误提示变得友好
    • 协程
      • 应用级并发机制的支持
      • 让异步编程更方便
    • range
      • 更好地支持了函数式编程风格

正在路上的C++23

  • 完善标准库STL,值得期待的4个功能
    • 标准库对于协程的支持(Library support for coroutines)
    • 模块化的标准库(A modular standard library)
    • Executors
    • networking(基于ASIO)

参考

  1. 《C++语言的设计和演化》
  2. cppreference.com
  3. 走进编程:C++的发展历程
  4. C++17新特性
  5. C++23的目标
  6. Welcome to Bjarne Stroustrup’s homepage!
  7. Evolving a language in and for the real world: C++ 1991-2006
  8. A History of C++: 1979− 1991

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95381.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt6实现绘图工具:12种绘图工具全家桶!这个项目满足全部2D场景

项目概述 一个基于Qt框架开发的专业绘图工具,实现了完整的2D图形绘制、编辑和管理功能。该项目采用模块化设计,包含图形绘制、图层管理、命令模式撤销重做、用户界面等多个子系统,是学习现代C++和Qt框架的最佳实践。 核心功能特性 12种专业绘图工具 多图层绘制系统 完整的…

Linux驱动开发学习笔记

第1章 Linux驱动开发的方式mmap映射型设计方法。【不推荐】将芯片上的物理地址映射到用户空间的虚拟地址上,用户操作虚拟地址来操作硬件。使用文件操作集(file_operatiopns)设计方法。【极致推荐】platfrom总线型设置方法。【比较流行】设备树。【推荐】第2章 Linux…

mac中进行适用于IOS的静态库构建

前沿: 进行C开发完成之后,需要将代码编译成静态库,并且在IOS的手机系统中执行,因此记录该实现过程. 1主要涉及内容 1.1 整体文件架构 gongyonglocalhost Attention % tree -L 2 . ├── build │ ├── __.SYMDEF │ ├── cmake_install.cmake │ ├── CMakeCache…

C++二维数组的前缀和

C二维数组的前缀和的方法很简单&#xff0c;可以利用公式res[i][j]arr[i][j]res[i-1][j]prefix[i][j-1]-res[i-1][j-1]。输入4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16输出1 3 6 10 6 14 24 36 15 33 54 78 28 60 96 136#include<bits/stdc.h> using namespace std; int…

Wifi开发上层学习1:实现一个wifi搜索以及打开的app

Wifi开发上层学习1&#xff1a;实现一个wifi搜索以及打开的app 文章目录Wifi开发上层学习1&#xff1a;实现一个wifi搜索以及打开的app背景demo实现1.添加系统权限以及系统签名2.布局配置3.逻辑设计3.1 wifi开关的实现3.2 wifi扫描功能3.3 连接wifi总结一、WiFi 状态控制接口二…

【DSP28335 入门教程】定时器中断:为你的系统注入精准的“心跳”

大家好&#xff0c;欢迎来到 DSP28335 的核心精讲系列。我们已经掌握了如何通过外部中断来响应“外部事件”&#xff0c;但系统内部同样需要一个精准的节拍器来处理“内部周期性任务”。单纯依靠 DELAY_US() 这样的软件延时&#xff0c;不仅精度差&#xff0c;而且会在延时期间…

从零开始:用代码解析区块链的核心工作原理

区块链技术被誉为信任的机器&#xff0c;它正在重塑金融、供应链、数字身份等众多领域。但对于许多开发者来说&#xff0c;它仍然像一个神秘的黑盒子。今天&#xff0c;我们将抛开炒作的泡沫&#xff0c;深入技术本质&#xff0c;用大约100行Python代码构建一个简易的区块链&am…

网络通信IP细节

目录 1.通信的NAT技术 2.代理服务器 3.内网穿透和内网打洞 1.通信的NAT技术 NAT技术产生的背景是我们为了解决IPV4不够用的问题&#xff0c;NAT在通信的时候可以对IP将私网IP转化为公网IP&#xff0c;全局IP要求唯一&#xff0c;但是私人IP不是唯一的。 将报文发给路由器进行…

国内真实的交换机、路由器和分组情况

一、未考虑拥挤情况理想状态的网络通信 前面我对骨干网&#xff1a; 宜春城区SDH网图分析-CSDN博客 数据链路层MAC传输&#xff1a; 无线通信网卡底层原理&#xff08;Inter Wi-Fi AX201&#xff09;_ax201ngw是cnvio转pci-e-CSDN博客 物理层、数据链路层、网络层及传输层…

atomic常用类方法

Java中的java.util.concurrent.atomic包提供了多种原子操作工具类&#xff0c;以下是核心类及其方法&#xff1a;‌1. AtomicBoolean‌‌方法‌&#xff1a;get()&#xff1a;获取当前值set(boolean newValue)&#xff1a;强制设置值compareAndSet(boolean expect, boolean upd…

算法题打卡力扣第3题:无重复字符的最长子串(mid)

文章目录题目描述解法一&#xff1a;暴力解解法二&#xff1a;滑动窗口题目描述 解法一&#xff1a;暴力解 遍历每一个可能的子串&#xff0c;然后逐一判断每个子串中是否有重复字符。 具体步骤&#xff1a; 使用两层嵌套循环来生成所有子串的起止位置&#xff1a; 外层循环 i…

HTML5 简介和基础骨架

一、HTML5 简介HTML5 是 HTML&#xff08;超文本标记语言&#xff09;的第五个主要版本&#xff0c;于 2014 年 10 月由 W3C&#xff08;万维网联盟&#xff09;正式发布。它不仅是对 HTML4.01 和 XHTML 的升级&#xff0c;更是一套完整的 Web 技术标准&#xff0c;包含了新的标…

.NET技术深度解析:现代企业级开发指南

每日激励&#xff1a; “不要一直责怪过去的自己&#xff0c;他曾经站在雾里也很迷茫” &#x1f31f; Hello&#xff0c;我是蒋星熠Jaxonic&#xff01; &#x1f308; 在浩瀚无垠的技术宇宙中&#xff0c;我是一名执着的星际旅人&#xff0c;用代码绘制探索的轨迹。 &#x1…

苹果手机文本转音频,自行制作背诵素材

当你在学习一段专业内容或者背诵重要知识点时&#xff0c;是不是有时会觉得眼睛看久了疲惫&#xff0c;而且记忆效果也不太理想呢&#xff1f;利用手头的苹果手机或iPad&#xff0c;你可以轻松将文本内容生成音频文件&#xff0c;然后随时随地反复听&#xff0c;这对于备考人士…

电子电子技术知识------MOSFET管

电子电子技术知识------MOSFET管前言一、结构与符号二、工作原理1.小功率MOSFET&#xff08;横向导电&#xff09;2.电力MOS管三、基本特性总结前言 MOSFET是电力场效应晶体管的英文简写&#xff0c;又称功率mos管&#xff0c;mos管 一、结构与符号 二、工作原理 1.小功率M…

仿真波导中超短脉冲传输中的各种非线性效应所产生的超连续谱

在波导中&#xff0c;超短脉冲传输时会受到各种非线性效应的影响&#xff0c;从而产生超连续谱。这些非线性效应包括自相位调制&#xff08;SPM&#xff09;、交叉相位调制&#xff08;XPM&#xff09;、四波混频&#xff08;FWM&#xff09;等。基于MATLAB的仿真程序&#xff…

docker-compose的使用

目录 1-查看容器 2-查看docker镜像 3-运行两个容器 4-进入idea 编写docker-compose文件中的内容 5-编写配置文件 6-运行 7-docker-compose中的一些命令 启动服务 关闭服务 查看正在运行的容器 查看日志 重构新的服务 指令docker-compose 文件名 停止已运行的服务 启动 重启 1-查…

搭建分布式Hadoop集群[2025] 实战笔记

文章目录 一、实战目标 二、集群规划 1. 集群拓扑结构 2. 角色分配 说明: 三、环境准备 1. 修改 SSH 端口(安全加固) 操作步骤(所有节点执行): 2. FinalShell 连接配置 3. 防火墙配置 启动并配置 firewalld: 关闭并禁用防火墙(生产环境建议精细配置,测试环境可关闭):…

【自记录】Ubuntu20.04下Python自编译

因为需要新的Python版本&#xff0c;但是我们不希望修改系统原生的Python版本避免某些系统应用无法启动&#xff0c;因此自建一个干净的路径引入Python。 1.编译 以下在aarch64下测试&#xff0c;x64下可能有差异 必须把相关的devel包安装完毕&#xff0c;否则python可能缺功能…

Linux - 进程切换

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录进…