> 文章列表 > c++23中的新功能之一介绍

c++23中的新功能之一介绍

c++23中的新功能之一介绍

一、c++23的目标和延革

c++的标准发展速度在经过c++11的近乎可以称革新的变化之后,开始步入了快车道。有的人在网上说,c++11后的c++语言和c++11以前的c++语言不是一个语言,这有点夸张了。但不可否认,其内容确实变化非常大。很多人可能都没有感觉到c++新标准的变化,毕竟国内的应用还是比较浅的。可是,c++14和c++17又快速推出,还没等c++开发人员缓过神儿来,c++20又迫不及待的出现了。快吗?不快。这不,c++23的标准,现在基本也算敲定的差不多了。
而c++26也会在今年开始启动标准的制定,而c++29也已经开始规划。
从过去的发展到未来的规划,排除特殊情况(covid-19对c++23是有影响的)可以基本看清楚,c++的新标准是呈现大小大小这种波浪式的渐进过程,可以理解为出现一次大的标准改进,就会在后续一个版本进行完善和迭代扩展;然后再进行一次大的标准的改进,再一次完善,如此反复。
实际情况中,c++11的对c++语言的改变可以说令人耳目一新,而c++14就相对来说比较小了,几乎没有推出什么新的东西,c++17虽然有所突破,但仍然保持一个中型向上的扩展态势,直到c++20推出了概念等四大新特性。c++23其实更接近于c++17的变化,但由于一些特殊的情况导致一些细节可能最终无法完成,所以说c++26可能会相对偏大一些,但真正的大变化可能会在c++29产生。当然,前面的是已经成为的事实,而后面是一种规划,还要看最终的结果。
对于c++标准的制定,大概分为两部分,一部分是c++语言特性本身的制定;另外一个就是c++标准库特性的制定。
可以显而易见的是,前者的的难度比后者要大的得多。
至于标准更改中涉及到的相关标准提案,有兴趣可以去网上查找,特别去标准的网站上可以看到相关的T0,T0.5,T1,T2,T3等分类的方式和应用划分的条件。

二、c++23的新特性

c++23的新特性就从两个方面来介绍,即语言本身和STL特性两个方面。
A、语言特性
1、显示的this
2、多维数组的支持operator[]
3、size_t的字面量支持
4、浮点字面量
5、假定表达式
6、新的预处理指令
7、Lambda的简化
8、UNICODE转义字符的增强
9、显示的Move
10、CATD的增强
这是看上去相对来说比较明确的新的语言特性,其实还有一些,但最终有多少还要看最终标准的尘埃落定。

B、标准库特性
1、stl的import应用
2、异常和格式化输出
3、协程的std::generator
4、mdspan多数据视图
5、平坦容器
6、堆栈信息库
7、zip系列
8、异质容器成员
9、大量的库的细节的完善和更新以及BUG的FIX

国内的书籍跟进太慢,而且国内的相关文章也比较少,建议还是多看一外文书籍(当然前提是得能看),象最新的c++模板编程就大量使用了新的c++标准,还有c++20的相关书籍,国内很少。当然这也是国内的环境使然,毕竟c++在国内是一门已经不太受欢迎的语言,即使现在有些重新发光的样子,但还得再看看。
后面的文章会对其中的一些特性进行分析说明,这里不再展开说明了。

三、总结

在c++23中大家比较期待的其实是对c++20的一些新标准的完善和最终应用,重点就是协程在STL的应用,标准库的Modules应用,Executors和网络库。不过目前来看,后两个比较麻烦,原来还认为Executors应该是比较容易的。不过,最终结果不出来,还是不敢明确说。标准不断迭代,是个好事情,谁也不愿意看着一幅老面孔不变。
标准制定出来,编译器和IDE的跟进估计会晚上半年到一年,也就是说,真正要用(非试用)得明年了。不过好多编译器会对一些自己的提案中的相关部分或一些有兴趣的部分有支持,这个可以试试,但也是只是试试吧,在实际工程里风险有点大。