第0章 简单说几句
前言
我要开始写技术文章了,这个专栏专门为现代C++开设的。我还记得那个时候说什么感觉自己是个大佬了,才开始写技术文章。现在,好像有点食言了,因为我现在还是一个菜鸡。这个专栏开设的目的是为了和大家一起学习现代C++。主要是,我们公司新招进来一个应届的毕业生,我看到他的代码里充满了NULL这种老古董,到处都有 char * 这种沙雕东西。我真是有点为国内的本科教育担心啊,这些是神马东西啊,你在学校写这种代码不会挨骂吗?
什么是现代C++
在《现代C++白皮书》将C++98称之为传统C++,C++14以及之后的称之为现代C++。白皮书里的界限也不是很明确,这个是我自己总结出来的。《现代C++教程:高速上手C++11/14/17》(2021.12.3)中,C++11以及之后的C++都叫做现代C++。目前,专栏里的文章也是基于这本书写的。现在我也在看这本书,想要把现代C++的知识集中的学习一遍,为以后学习C++23打下基础。这本书的目的也非常明确,快速上手。适合想要有传统C++基础,想要快读上手现代C++的人。
为什么要学习现代C++
其实,现在行业里流行的应该就是C++11,工作里用的最多的也是C++11。C++14/17增加的特性都是提高可读性和编程严谨性的特性的,在总的方向上没有太大的出入。但是C++20不一样,C++20新引入的一些特性,从整体语言结构上就出现了翻天覆地的变化。比如模块、协程、Concepts等。可以说,C++20会彻底改变原有的C++的编程方式,是一次大版本的更新。个人感觉应该会和C++11一样,具有重大意义。那么学习C++20之前,应该对现代C++的特性有所了解。
关于C++语言更新问题
C++语言的更新体系是由社区和委员会一起进行。社区聚集了全世界的C++程序员,这些程序员会开发开源库,之后有好的特性会进行提案。提案会上交到C++委员会中进行开会决议,决议通过之后才会添加到C++的正式标准当中。这个委员会是世界各个顶尖公司的顶级C++大佬,有谷歌的,微软的,IBM的。通常一个比较大的特性会经历过好多次的提案和决议。所以,看起来C++的特性迭代有些慢。但是,这正是C++作为一门系统级编程语言的魅力所在。只要添加到C++标准中的东西,一定是在效率和可读性方面最高的,这是所有语言都比不了的(除了C)。这就导致语言迭代的非常慢,C++因为这一点经常被吐槽。比如,心心念念的模块化编译,这面多年了,才纳入到标准库,以后终于不用导入长长的头文件了。
关于可读性
前面多次提到可读性。这个特性对于一门系统级编程语言是非常重要的。只要是涉及到系统层面,那么就会要多个子系统相互交错。你写的代码,更多的时候是别人去看,别人去调用。你弄一个只有自己可以看得懂的代码,在公司里是会被打的。所以,那些在项目里经常写 int a 的人,赶紧去死吧。之后再来说说编程风格,正所谓见字如面,程序员的代码风格就是程序员的门面。这一点国外公司做的就非常好,他们连一个缩进是4个空格,不能是一个 tab 都有明确规定(这里涉及到跨平台)。一个好的代码风格,不仅要简介,更重要的是高效和安全。尽量养成一个代码洁癖,编写程序的时候,在保证效率的情况下,尽可能的提升可读性。这个效率指的是编写效率和运行效率。关于这一点,B站上有一个叫Frank的大佬讲的非常好,也比较符合行业标准。
最后
写这个文章的目的也不是为了教给大家什么,更多的是为了和大家一起学习探讨。所以,文章里要是有什么不对的,和不准确的欢迎评论区里讨论。