当前最新C++标准是哪一版?
先说答案:仍是C++20。虽然2023年已接近尾声,C++23也已制订完成,但仍在等待最终审核发布。
- 写在前面
我准备继续开始更新这停了很久很久的C++相关系列。
熟悉我的读者应该都知道,我的专业是生物信息学(简称生信),而我正在开启的创业,也是打算基于生信技术,去推动包括科研在内的各种业务,解决医药等行业在现实世界中的各种问题。生信能助力生物学相关领域的业务,同时生信也需要各类信息技术的助力,这其中就包括C++。
当然,对于绝大多数场景,C++都不是生信首选所需,但我并不认为,这是让我放弃继续学习、研究和应用这门语言的足够理由。跟科研一样,在参与社会并实现个人价值的过程中,尽量保持创新,不断做出独特贡献,是个值得追求的目标。因此,即使身处九死一生的创业道路上,我也会在风险可控的前提下,尽量选择做一些差异化尝试,这其中就包括把C++的优势在生信中发挥出来。这个愿景,就如同我期望把生信的优势在其他业务中发挥出来一样。
- 关于C++及其标准
C++标准的发布,是出了名的难产(当年C++0x的拖更,真是远超过富坚老贼)。从2011年起,C++委员会明确了新标准的发布节奏:每三年一个版本。而经历了C++11、C++14、C++17和C++20,到今年,C++23看起来又要往后拖一拖了,不知道若是明年发布,它会叫C++23还是C++24呢?
我喜欢C++(至今如此),是因为它极强的可伸缩性。它对所生成的代码和所操作的内存数据,拥有近乎字节级的精确控制,因此能用它在极端恶劣的嵌入式环境中进行开发。而它在各新标准中加入的特性,可谓庞杂无比,却是在试图减轻开发负担,让我们可以像使用其他高级语言那样,尽量“优雅”(其实未必真的那么优雅)地写出企业级的大型软件。所以,心理扭曲到“代码洁癖”的极客们,经常是很难拒绝这样一门可以上天入地都通吃的语言的。
C++新标准有太多东西需要学习,但我相信付出这些学习时间是值得的。这个系列不会系统地把所有内容都罗列出来,但我可以把我学习过程中,发现的一些有趣用法,不定期地分享出来。也希望这能帮助到对此同样感兴趣、愿意把自己练就成为生信这条路上的一名极客的你。
- 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/
注:本文首发表于“不靠谱颜论”公众号,并同步至本站。