从C++98到C++26,经历了什么?

news2024/11/26 12:52:07

作为一名程序员,2023年最应该关注的话题就是C++的标准更新。

C++标准遵循3年开发周期,并以发布年份命名。C++在临发布的一年前会进入“功能冻结期(feature freeze)”,即版本开发进入半稳定状态,不再添加重大功能及特性,着重于修复各种BUG。因此,直到2025年初,C++26都会增加新内容。

上个月,C++26时间表发布,将会在“并发和并行性方面有重大改进”。而已经推出的C++ 23版本则沿袭了C++17的传统特征,完善了现有特性。但是,与C++ 98、C++11或C++20相比,改变略小。

图片

为理解C++下一步的发展方向,我们将C++放进历史大背景中讨论。

图片

C++26时间表发布

改进并发和并行性

上个月,ISO C++委员会举行会议,正式通过C++26时间表。当时,共有近180名成员参会。ISO C++标准委员会主席兼微软本地语言架构师Herb Sutter发文详细介绍了有关C++26的最新进展。

图片

C++ 26首轮会议公告(图源:Herb Sutter)

Herb Sutter在文章中表示:并发和并行小组目前仍在按计划推进C++26的 std::execution和SIMD并行。该版本在“并发和并行性方面有重大改进”,但是,Herb Sutter并没有透露具体改进内容与可能的技术细节。

值得一提的是,在本次会议上,委员会采纳首批共计40份变更文件,其中的变更都相当小。

图片

C++ 26时间表(图源:Herb Sutter)

据悉,与C++ 26相关的下两轮会议将分别于11月及次年3月举行,前者在美国夏威夷州科纳举行,由WorldQuant和Standard C++ Foundation主办;后者在日本东京举行,由Woven by Toyota主办。

图片

C++23标准

7月,C++23已完成更新,并进入了最终投票阶段。

C++23是由国际标准化组织(ISO)和国际电信联盟(ITU)颁布的编程语言C++标准。它最初于2017年6月正式发布,是2001年的ISO/IEC 14882:2001(C++11)的下一个迭代。

C++23完整地实现了C++的表达力,并使其对计算机科学和软件工程更有用。

它的主要特性包括:模板参数捕获、可变参数模板等。同时,它还引入了一些新的核心语言特性,如,UTF-8字符串字面量、更多的类型别名和using声明等。

此外,C++23还引入了一些新特性,如,简化的工作线程支持、原子操作、普通指针改进、区域性和字符编码以及可以按程度进行编辑的新字符串操作。

最值得一提的是,C++23中引入了this推导,使C++轻松实现复杂技术。你可以直接使用import std导入标准库,或者在std::print和std::println中应用C++20的格式字符串。

此外,在C++23中,开发者将获得扁平化关联容器。这些容器平衡了时间和空间复杂度。std::flap_map可取代std::map,而std::optional的接口将扩展为单子接口。

图片

从C++98到C++20

那么,C++标准经历了哪些历史变革呢?

图片

图片

C++98

20世纪80年代末,Bjarne Stroustrup和Margaret A. Ellis撰写了著名的《注释C++参考手册》(简称ARM)。

当时,ARM根据独立的C++实现定义了C++的功能;并且,ARM为第一个C++标准——C++98(ISO/IEC 14882)奠定了基础。

值得一提的是,C++98包括:模板、包含容器和算法的标准模板库(STL)、字符串和IO流。

C++ 03

在C++ 03(14882:2003)中,修正了一些微小的技术,但在社区中仍被称为传统C++。

图片

TR1

2005年,令人兴奋的事发生了。Technical Report 1(简称TR1)推出,是由C++标准化委员会成员建立的boost项目,推动现代C++向前迈出一大步,也为后续C++11的出现奠定了基础。

具体来讲,TR1有13个库。这些库也成为了下个C++版本的一部分,分别对应到正则表达式库、随机数库、智能指针(如,std::shared_ptr)和哈希表。

图片

C++11

C++11被称为现代C++,它的许多特性从根本上改变了C++的编程方式。例如,C++11引入了TR1组件,还有移动语义、完美转发、可变模板或constexpr等特性。

但是,这些并不是全部。随着C++11的到来,我们还获得了内存模型作为基础的线程模型以及线程API。

图片

C++14

C++14是一个小型C++标准,引入了读写锁、泛化lambda和泛化constexpr函数。

实际上,C++14相对之前的11并没有太大改动,或者说更像C++11标准基础上的查漏补缺。C++14之后,还有17、20、23,所以,C++14更像个过渡版本。

图片

C++17

C++ 17有两个突出的特性:并行的STL和标准化的文件系统。大约80个STL算法可使用执行策略执行。

这意味着,调用std::sort可以在C++中实现对容器vec并行排序的提示。此外,你还可以按顺序进行指定排序或向量化。

就像C++11一样,boost对C++17也产生了重大的影响,从boost中获得了文件系统以及3种新的数据类型:std::optional、std::variant和std::any。

图片

C++20

C++ 20的革新从根本上改变了编写C++的方式,程度不亚于C++11,特别是以下四个重要特性:Ranges(范围库),Coroutines(协程),Concepts(概念)以及 Modules(模块)。

·新的Ranges库能够直接在容器上表达算法、使用管道符组合算法,并将它们应用于无限数据流。

·Coroutines使异步编程在C++中成为主流。Coroutines是协作任务、事件循环、无限数据流或管道的基础。

·Concepts将改变我们对模板的思考和编程方式,是有效模板参数的语义类别。Concepts让你能够直接在类型系统中表达你的意图。如果出了什么问题,你会收到简洁的错误信息。

·Modules将克服头文件的限制,也带来了诸多好处。例如,不再需要预处理器。最终,我们还将拥有更快的构建时间和更简单的包构建方式。

C++的下一步

神奇递归模板模式

C++的设计模式大致可分为三类:创建型模式、结构型模式和行为型模式。

而神奇递归模板模式(CRTP)也是C++的设计模式,精巧地结合了继承和模板编程技术,可用来为C++的class提供额外的功能、实现静态、多态等。

总之,CRTP实现了静态多态,将会成为接下来C++的重要设计模式。

参考资料:

http://modernescpp.com/index.php/c-23-deducing-this

http://modernescpp.com/index.php/c-23-the-next-c-standard

http://app.myzaker.com/news/article.php?pk=64b0fc568e9f0911572638ac

---END---

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

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

相关文章

【C语言】入门——指针

目录 ​编辑 1.指针是什么 2.指针类型和指针运算 2.1指针-整数 2.2指针-指针 2.3指针的关系运算 3.野指针 3.1野指针成因 👍指针未初始化: 👍指针越界访问: 👍指针指向空间释放: 3.2如何规避野指针 …

PDF转Word的方法分享与注意事项。

PDF和Word是两种常用的文档格式,它们各有优点,适用于不同的场景。然而,有时候我们需要将PDF转换为Word,以便更好地进行编辑和排版。本文将介绍几种常用的PDF转Word的方法,并分享一些注意事项。 一、PDF转Word的方法 使…

性能炸裂c++20协程+iocp/epoll,超轻量高性能异步库开发实战

前言: c20出来有一段时间了。其中一大功能就是终于支持协程了(c作为行业大哥大级别的语言,居然到C20才开始支持协程,我也是无力吐槽了,让多少人等了多少年,等了多少青春)但千呼万唤他终于还是来…

python图书书籍管理系统及推荐评分系统vue

本系统提供给管理员对书籍分类、书籍信息、书籍评分、留言板等诸多功能进行管理。本系统对于用户输入的任何信息都进行了一定的验证,为管理员操作提高了效率,也使其数据安全性得到了保障。随着信息化时代的到来,网络系统都趋向于智能化、系统…

拿下数千万元A轮融资,这家HUD厂商驶入规模上车的“快车道”

进入2023年,AR HUD市场迎来了爆发式增长,一批本土HUD厂商开始备受资本市场的关注。 近日,深圳前海智云谷科技有限公司(以下简称“智云谷”)完成数千万元A轮融资,本轮融资由清新资本等投资方投资。智云谷表…

你以为的直线,在多维空间里是复杂的曲线

你以为的直线,在多维空间里是复杂的曲线 AI回答: 这句话是说,在多维空间中,我们的直觉和经验可能会误导我们,认为一条直线应该是简单直接的。然而,在高维空间中,直线可能会有很多突变和弯曲&am…

ES6中let和const关键字与var关键字之间的区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量作用域(Scope):⭐ 变量提升(Hoisting):⭐ 重复声明:⭐ 初始化:⭐ 全局对象属性:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#…

41.SpringMVC实现下载和上传功能

SpringMVC实现下载和上传功能 下载 ResponseEntity用于控制器方法的返回值类型&#xff0c;该控制器方法的返回值就是响应到浏览器的响应报文 index.html <a th:href"{/testDown}">下载图片</a>使用ResponseEntity实现下载文件的功能FileUpAndDownCon…

MCS-51单片机温度控制系统的设计

一、项目介绍 注塑机是一种常用的制造设备&#xff0c;用于生产塑料制品。在注塑机的工作过程中&#xff0c;溶胶必须达到一定的温度才能被注入模具中进行成型。因此&#xff0c;在注塑机的生产过程中&#xff0c;温度控制是非常重要的一环。 本项目基于MCS-51单片机设计了一…

关于TE,PU邀请函

有人问我说客户让办理TE邀请函&#xff0c;具体步骤是哪些&#xff1f;我目前还没遇到过客户要求办理TE邀请函的&#xff0c;基本上都是普通的商务签证&#xff0c;只要写个邀请函给客户&#xff0c;剩下的事情客户就能自己搞定&#xff0c;他们来访的目的简单&#xff0c;要么…

虹科方案|HK-Edgility利用边缘计算和VNF降本增效

一、边缘计算和 VNF 在当今瞬息万变的数字环境中&#xff0c;边缘虚拟化网络功能&#xff08;VNF&#xff09;是一个既能够优化网络基础设施&#xff0c;又能控制成本的创新型解决方案。它使客户能够将多个基于软件的 VNF 整合到一个专用计算设备上。更值得高兴的是&#xff0c…

【开发】视频集中存储/直播点播平台EasyDSS点播文件分类功能优化

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

LNMP架构搭建论坛

目录 一、LNMP简介&#xff1a; 二、LNMP搭建&#xff1a; 1.前提准备&#xff1a; 关闭防火墙和安全机制&#xff1a; 2.编译安装nginx&#xff1a; 3.编译安装mysql&#xff1a; 3.1 安装依赖环境&#xff1a; 3.2 创建mysql运行用户&#xff1a; 3.3 编译安装&#xff1a…

Vue.js核心技术深度解析与uni-app跨平台开发实战

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Vue.js是一款流行的Java…

算法训练day39|动态规划 part02(LeetCode62.不同路径、63. 不同路径 II)

文章目录 62.不同路径思路分析代码实现 63. 不同路径 II思路分析代码实现思考总结 62.不同路径 题目链接&#x1f525;&#x1f525; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步…

Lua语法结构

Lua基础 注释 print("hello.") -- 单行注释的写法 --[[ 多行注释的写法 --]]标识符 关键字 **and **break**do **else**elseif ****end **falsefor**function **ifinlocalnilnotorrepeatreturnthentrueuntil**while ** 数据类型 nil** boolean**** number**** st…

MyBatis-Plus排除不必要的字段

查询学生信息排除年龄列表 &#x1f4da;&#x1f50d; 使用MyBatis-Plus排除某些字段。如果你想要进行查询&#xff0c;但又不需要包含某些字段&#xff0c;那么这个功能将非常适合你。&#x1f50d;&#x1f393;&#x1f4dd; 1. 学生信息查询-排除年龄列表 在使用 MyBat…

Vue.js基础(一)

目录 1、{{ }} 文本插值 2、v-html原始html 3、v-bind Attribute&#xff08;属性&#xff09;绑定\三元运算符 4、v-for列表渲染 5、v-on监听事件 6、事件调用方法 7、v-model表单的输入绑定 8、Props组件交互 父传子 子传父 子传父总结 1、{{ }} 文本插值 <…

手写Spring:第3章-实现Bean的定义、注册、获取

文章目录 一、目标&#xff1a;实现Bean的定义、注册、获取二、设计&#xff1a;实现Bean的定义、注册、获取三、实现&#xff1a;实现Bean的定义、注册、获取3.1 工程结构3.2 实现Bean的定义、注册、获取类图3.3 定义Bean异常3.4 BeanDefinition定义和注册3.4.1 BeanDefinitio…

解决 Spring Boot 与 springfox 的 NullPointerException 问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…