点击加载图片
整理|王瑞平
作为一名程序员,2023年最应该关注的话题就是C++的标准更新。
C++标准遵循3年开发周期,并以发布年份命名。C++在临发布的一年前会进入“功能冻结期(featurefreeze)”,即版本开发进入半稳定状态,不再添加重大功能及特性,着重于修复各种BUG。因此,直到2025年初,C++26都会增加新内容。
上个月,C++26时间表发布,将会在“并发和并行性方面有重大改进”。而已经推出的C++23版本则沿袭了C++17的传统特征,完善了现有特性。但是,与C++98、C++11或C++20相比,改变略小。
点击加载图片
图片
为理解C++下一步的发展方向,我们将C++放进历史大背景中讨论。
点击加载图片
C++26首轮会议公告(图源:HerbSutter)
HerbSutter在文章中表示:并发和并行小组目前仍在按计划推进C++26的std::execution和SIMD并行。该版本在“并发和并行性方面有重大改进”,但是,HerbSutter并没有透露具体改进内容与可能的技术细节。
值得一提的是,在本次会议上,委员会采纳首批共计40份变更文件,其中的变更都相当小。
点击加载图片
C++26时间表(图源:HerbSutter)
据悉,与C++26相关的下两轮会议将分别于11月及次年3月举行,前者在美国夏威夷州科纳举行,由WorldQuant和StandardC++Foundation主办;后者在日本东京举行,由WovenbyToyota主办。
C++23是由国际标准化组织(ISO)和国际电信联盟(ITU)颁布的编程语言C++标准。它最初于2017年6月正式发布,是2001年的ISO/IEC14882:2001(C++11)的下一个迭代。
C++23完整地实现了C++的表达力,并使其对计算机科学和软件工程更有用。
它的主要特性包括:模板参数捕获、可变参数模板等。同时,它还引入了一些新的核心语言特性,如,UTF-8字符串字面量、更多的类型别名和using声明等。
此外,C++23还引入了一些新特性,如,简化的工作线程支持、原子操作、普通指针改进、区域性和字符编码以及可以按程度进行编辑的新字符串操作。
最值得一提的是,C++23中引入了this推导,使C++轻松实现复杂技术。你可以直接使用importstd导入标准库,或者在std::print和std::println中应用C++20的格式字符串。
此外,在C++23中,开发者将获得扁平化关联容器。这些容器平衡了时间和空间复杂度。std::flap_map可取代std::map,而std::optional的接口将扩展为单子接口。
点击加载图片
当时,ARM根据独立的C++实现定义了C++的功能;并且,ARM为第一个C++标准——C++98(ISO/IEC14882)奠定了基础。
值得一提的是,C++98包括:模板、包含容器和算法的标准模板库(STL)、字符串和IO流。
具体来讲,TR1有13个库。这些库也成为了下个C++版本的一部分,分别对应到正则表达式库、随机数库、智能指针(如,std::shared_ptr)和哈希表。
但是,这些并不是全部。随着C++11的到来,我们还获得了内存模型作为基础的线程模型以及线程API。
实际上,C++14相对之前的11并没有太大改动,或者说更像C++11标准基础上的查漏补缺。C++14之后,还有17、20、23,所以,C++14更像个过渡版本。
这意味着,调用std::sort可以在C++中实现对容器vec并行排序的提示。此外,你还可以按顺序进行指定排序或向量化。
就像C++11一样,boost对C++17也产生了重大的影响,从boost中获得了文件系统以及3种新的数据类型:std::optional、std::variant和std::any。
·新的Ranges库能够直接在容器上表达算法、使用管道符组合算法,并将它们应用于无限数据流。
·Coroutines使异步编程在C++中成为主流。Coroutines是协作任务、事件循环、无限数据流或管道的基础。
·Concepts将改变我们对模板的思考和编程方式,是有效模板参数的语义类别。Concepts让你能够直接在类型系统中表达你的意图。如果出了什么问题,你会收到简洁的错误信息。
·Modules将克服头文件的限制,也带来了诸多好处。例如,不再需要预处理器。最终,我们还将拥有更快的构建时间和更简单的包构建方式。
而神奇递归模板模式(CRTP)也是C++的设计模式,精巧地结合了继承和模板编程技术,可用来为C++的class提供额外的功能、实现静态、多态等。
总之,CRTP实现了静态多态,将会成为接下来C++的重要设计模式。
http://modernescpp.com/index.php/c-23-the-next-c-standard
http://app.myzaker.com/news/article.php?pk=64b0fc568e9f0911572638ac
联系客服