转眼间,1979年出生的C++语言已经步入中年,这位大叔年轻的时候就有点复杂,这几年愈发的开始“一人千面”,关于这门语言的争论一直没有停止,不过正如它的发明者Bjarne Stroustrup所说,世上只有两种编程语言:一种被人骂,一种没人用。

Bjarne Stroustrup在2020年写了一篇叫做Thriving in a Crowded and Changing World: C++ 2006–2020的文章,回顾了一下从2006年到2020年C++标准的演化过程,主要涉及到了2011、2014、2017和2020四个大版本的ISO C++ standard的修订情况,当然也简单回顾了历史,包括在此之前还有1998和2003年的两个标准,上个世纪学编程的同学是不是还记得那个对标准支持得非常糟糕的坑爹VC 6.0编译器?

https://dl.acm.org/doi/pdf/10.1145/3386320

到了2023年7月,C++ 23这个新标准都已经确定下来了。说到C++标准的演化,一般人可能很难跟上标准化委员会那帮人的步伐,新特性越来越多,学习曲线越来越陡,先来看一个代码示例:

你对这个代码示例理解多少?实际上,只需要找到一个支持C++ 11标准的编译器就可以对它进行编译。这种对原始复杂代码的简化(一般我们管这种做法叫做“语法糖,可以参考https://www.luogu.com.cn/article/l86yn4aw [从 C++98 到 C++20,寻觅甜甜的语法糖们 - 洛谷专栏] 这篇文章看看),把实现的细节都遮盖起来,如果你一开始就学了这种风格,虽然代码更加简洁了,但是对于底层的实现可能就只是“囫囵吞枣”;而如果你是大龄程序员,也许完全不懂这种风格,看了也会一头雾水。

遇到这种问题,当然可以求助编译器(虽然C++编译器的提示信息的易读性那可是臭名昭著),为了帮助大家更好理解编译器对语法糖的“拆解”,今天我们就要给大家安利一个学习网站——C++ Insights

C++ Insights网站:https://cppinsights.io/

这个网站能够把一些“魔法代码”的编译器理解版本给你来个“低维展开”,让你看清楚更多的细节,例如上面那个例子,你在C++ Insights网站上让它帮忙处理一下,就会得到编译器处理后的版本:

怎么样,是不是瞬间就容易理解了,尽管代码规模膨胀了许多,但是你也不会拿整个工程去测试是不是?

在C++ Insights网站上还有一系列的学习资料,比如网站的开发者Andreas Fertig的技术报告:

Andreas Fertig还在YouTube上发布了一系列教学视频,大家有兴趣可以去深入学习:

https://www.youtube.com/watch?v=NhIubRbFfuM&list=PLm0Dc2Lp2ycaFyR2OqPkusuSB8LmifY8D

希望通过这个网站,能够帮助你更好了解C++的新特性,而不是还停留在《C++程序设计语言》特别版那个古老的标准上。

最后,也希望我们的读者们反馈一下,大家在大学里面现在学的是哪个标准的C++呢?已经用上了C++ 20,还是只会做下面的茴香豆题目?