0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

strongerHuang 来源:51CTO技术栈 2023-08-09 16:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

8月的TIOBE编程语言编排榜已经更新,C++依然呈现增长趋势,有望成为今年最受欢迎的编程语言。

3eeeece2-364b-11ee-9e74-dac502259ad0.png

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

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

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

3efd118c-364b-11ee-9e74-dac502259ad0.png

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

C++26时间表发布,改进并发和并行性

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

3f26d67a-364b-11ee-9e74-dac502259ad0.png

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

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

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

3f37408c-364b-11ee-9e74-dac502259ad0.jpg

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++标准经历了哪些历史变革呢?

3f5aaefa-364b-11ee-9e74-dac502259ad0.png

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++的重要设计模式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    20149

    浏览量

    247190
  • 编程语言
    +关注

    关注

    10

    文章

    1959

    浏览量

    38916
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76714

原文标题:从C++98到C++26,经历了什么?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    汽车3C:PROFINET转DEVICENET网关如何重塑制造边界

    汽车3C:PROFINET转DEVICENET网关如何重塑制造边界 1 案例背景与项目痛点 在华南一家大型3C制造企业的车间里,六轴机械臂正执行着精密装配任务。这些机械臂原本服务于
    的头像 发表于 12-02 16:22 359次阅读
    <b class='flag-5'>从</b>汽车<b class='flag-5'>到</b>3<b class='flag-5'>C</b>:PROFINET转DEVICENET网关如何重塑制造边界

    UART 升级 USB-C: 串口通信演变史

    的RS-232串口接口,取而代之的是USB,甚至更先进的USB-C。UARTUSB-C,这段演进究竟经历哪些关键阶段?1.起点:UART
    的头像 发表于 11-17 10:54 957次阅读
    UART 升级<b class='flag-5'>到</b> USB-<b class='flag-5'>C</b>: 串口通信演变史

    最开始可以正常上传C程序板子里面,上传几次之后便不能上传,为什么?

    最开始可以正常上传C程序板子里面,上传几次之后便不能上传,出现这种情况,请问各位大佬这是什么情况呀
    发表于 11-10 07:07

    XT26G02C-让数据管理变得如此简单!

    数据爆炸的时代 ,每个智能设备都需要一个可靠的"数据管家"。XT26G02C SPI NAND Flash就像一位训练有素的英国管家,随时准备为你处理各种数据存储需求。 它不只是简单的存储器,而是集
    的头像 发表于 10-31 08:45 188次阅读
    XT<b class='flag-5'>26G02C</b>-让数据管理变得如此简单!

    基于TPS544C26的高效同步降压转换器设计与应用

    Texas Instruments TPS544C26同步降压转换器是一款高度集成的降压式转换器,采用D-CAP+控制拓扑结构,可实现快速瞬时响应。所有可编程参数均可通过^I2C^接口进行配置,而且
    的头像 发表于 09-11 11:49 551次阅读
    基于TPS544<b class='flag-5'>C26</b>的高效同步降压转换器设计与应用

    TPS544C26EVM 35A降压转换器评估模块技术解析与应用指南

    Texas Instruments TPS544C26EVM转换器评估模块 (EVM) 用于TPS544C26 DC/DC直流/直流同步降压转换器,具有数字I²C和串行电压识别 (SVID) 接口
    的头像 发表于 09-10 15:10 639次阅读
    TPS544<b class='flag-5'>C26</b>EVM 35A降压转换器评估模块技术解析与应用指南

    TPS548C26EVM评估模块技术解析与应用指南

    Texas Instruments TPS548C26EVM评估模块专为TPS548C26 DC/DC同步降压转换器而设计。TI TPS548C26EVM评估模块提供8 V至16 V输入,输出电流
    的头像 发表于 09-02 14:18 637次阅读
    TPS548<b class='flag-5'>C26</b>EVM评估模块技术解析与应用指南

    基美通用贴片电容C0805CC0805X系列产品特点和应用场景介绍

    和应用场景。C0805C系列(一)产品特点-容量范围广:C0805C系列电容的容量范围较广,几皮法几微法不等,可满足不同电路对电容容量的需求。-高容差精度:部分
    的头像 发表于 09-01 14:43 492次阅读
    基美通用贴片电容<b class='flag-5'>C0805C</b>和<b class='flag-5'>C</b>0805X系列产品特点和应用场景介绍

    “代步工具”“智能伙伴”,存储如何支撑汽车升级之路

    我们手里的手机,功能机“飞升”智能机,经历几个关键阶段: 第一步,是交互方式的革新——按键
    的头像 发表于 08-21 16:36 546次阅读
    <b class='flag-5'>从</b>“代步工具”<b class='flag-5'>到</b>“智能伙伴”,存储如何支撑汽车升级之路

    请问cypd3125在 ( EZ-PD™ CCGx Host SDK) 中的流程代码如何main.c所有.c运行里面有文件吗?

    函数存在,但没有声明,也没有 .c文件在那里,所以我看不到代码流,我需要修改 type-c 的代码,但我看不到来自 main 和其他 .c 的函数流文件和一些.c缺少文件,我需要从主
    发表于 08-15 06:58

    TPS544C26 4V 至 16V、35A SVID 和 I²C 同步降压转换器数据手册

    TPS544C26 器件是一款高度集成的降压转换器,具有 D-CAP+ 控制拓扑,可实现快速瞬态响应。所有可编程参数均可通过 I 进行配置^2^C 接口并作为新的默认值存储在 NVM 中,以最大限度地减少外部组件数量。这些特性使该器件非常适合空间受限的应用。
    的头像 发表于 06-07 13:59 609次阅读
    TPS544<b class='flag-5'>C26</b> 4V 至 16V、35A SVID 和 I²<b class='flag-5'>C</b> 同步降压转换器数据手册

    自动驾驶经历哪些技术拐点?

    如今以AI为核心驱动的自动驾驶系统,各大车企都在不断加码研发投入,试图在未来市场中占据制高点。那自动驾驶发展至今,经历哪些技术拐点呢? 自动驾驶系统的发展历程 自动驾驶技术的发展是一个
    的头像 发表于 04-27 15:54 627次阅读
    自动驾驶<b class='flag-5'>经历</b><b class='flag-5'>了</b>哪些技术拐点?

    LDR6500如何实现Type-C转DP或DP转Type-C

    ,实现Type-CDisplayPort的信号转换。Type-C接口以其双面可插、高速数据传输和多功能集成特
    的头像 发表于 02-10 08:45 2074次阅读
    LDR6500如何实现Type-<b class='flag-5'>C</b>转DP或DP转Type-<b class='flag-5'>C</b>

    Delphi、C++ Builder和Lazarus连接到Oracle数据库

    Delphi、C++ Builder 和 Lazarus 连接到 Oracle 数据库 Oracle 数据访问组件 (ODAC) 是一个组件库,它为 32 位和 64 位平台提供 Delphi
    的头像 发表于 01-15 10:01 1348次阅读

    EE-128:C语言中的DSP:C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b>语言中的DSP:<b class='flag-5'>从</b><b class='flag-5'>C</b>调用汇编类成员函数