颜林林的个人网站

当前最新C++标准是哪一版?

2023-12-20 11:33

先说答案:仍是C++20。虽然2023年已接近尾声,C++23也已制订完成,但仍在等待最终审核发布。

题图
(题图由AI生成)
  1. 写在前面

我准备继续开始更新这停了很久很久的C++相关系列。

熟悉我的读者应该都知道,我的专业是生物信息学(简称生信),而我正在开启的创业,也是打算基于生信技术,去推动包括科研在内的各种业务,解决医药等行业在现实世界中的各种问题。生信能助力生物学相关领域的业务,同时生信也需要各类信息技术的助力,这其中就包括C++。

当然,对于绝大多数场景,C++都不是生信首选所需,但我并不认为,这是让我放弃继续学习、研究和应用这门语言的足够理由。跟科研一样,在参与社会并实现个人价值的过程中,尽量保持创新,不断做出独特贡献,是个值得追求的目标。因此,即使身处九死一生的创业道路上,我也会在风险可控的前提下,尽量选择做一些差异化尝试,这其中就包括把C++的优势在生信中发挥出来。这个愿景,就如同我期望把生信的优势在其他业务中发挥出来一样。

  1. 关于C++及其标准

C++标准的发布,是出了名的难产(当年C++0x的拖更,真是远超过富坚老贼)。从2011年起,C++委员会明确了新标准的发布节奏:每三年一个版本。而经历了C++11、C++14、C++17和C++20,到今年,C++23看起来又要往后拖一拖了,不知道若是明年发布,它会叫C++23还是C++24呢?

我喜欢C++(至今如此),是因为它极强的可伸缩性。它对所生成的代码和所操作的内存数据,拥有近乎字节级的精确控制,因此能用它在极端恶劣的嵌入式环境中进行开发。而它在各新标准中加入的特性,可谓庞杂无比,却是在试图减轻开发负担,让我们可以像使用其他高级语言那样,尽量“优雅”(其实未必真的那么优雅)地写出企业级的大型软件。所以,心理扭曲到“代码洁癖”的极客们,经常是很难拒绝这样一门可以上天入地都通吃的语言的。

C++新标准有太多东西需要学习,但我相信付出这些学习时间是值得的。这个系列不会系统地把所有内容都罗列出来,但我可以把我学习过程中,发现的一些有趣用法,不定期地分享出来。也希望这能帮助到对此同样感兴趣、愿意把自己练就成为生信这条路上的一名极客的你。

  1. C++标准发展历史概述

再简单回顾下到目前为止已正式发布的C++主要标准及其特点:

C++98/C++03:

这是C++的第一个国际标准,ISO/IEC 14882:1998,通常称为C++98。

C++03是对C++98的修订,主要修复了标准文档中的错误,没有增加新的语言特性。

这两个标准确立了C++的基本语法和模板、异常处理、命名空间、多态和继承等基本特性。

C++11(之前被称为C++0x):

这个版本被广泛认为是自C++98以来最重大的更新。

引入了自动类型推断(auto)、基于范围的for循环、nullptr、lambda表达式、右值引用和移动语义、constexpr(编译时表达式)、多线程支持等。

提供了智能指针(如std::shared_ptr和std::unique_ptr)和新的库功能。

改进了模板,包括模板别名和可变参数模板。

C++14:

是C++11的小幅更新和改进。

增加了泛型lambda表达式、返回类型推断、初始化捕获等。

改进了库功能,如引入了std::make_unique。

C++17:

引入了结构化绑定、if和switch中的初始化语句、内联变量和constexpr if。

改进了模板推断机制,包括类模板参数推断。

文件系统库(std::filesystem)被标准化。

弃用了一些旧特性,比如自动指针std::auto_ptr。

C++20:

这是迄今为止最大的一次更新,引入了概念(concepts)用于模板编程。

有三大特性:概念、协程和模块,它们都将显著改变C++代码的编写方式。

引入了范围视图(std::ranges)、日历和时间区功能、constexpr的新用法、lambda的模板参数。

引入了std::span等新的库组件。 3. C++新标准发布相关信息

不做更多解释了,直接上两个图片吧:

其一来自C++23草案(点击文末“查看原文”可以打开该PDF文件链接):

Image

其二来自 ISO CPP(“参考链接”中有相应URL):

Image

这篇就先到这里,更多的内容,我们放到以后再展开。下次见。

参考链接:

ISO C++ Status - https://isocpp.org/std/status C++ Wikipedia - https://en.wikipedia.org/wiki/C%2B%2B ISO/IEC 14882:2023(E) C++23 Draft - https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p1000r5.pdf C++ Reference - https://en.cppreference.com/w/

--- END ---

注:本文首发表于“不靠谱颜论”公众号,并同步至本站。

相关文章