早在大学时候,就有幸翻阅了侯捷老师的《深入浅出MFC》,至今记得其中“勿在浮砂筑高台”。毕业后混混沌沌的写了两三年c++,许多知识点是知其然不知其所以然。后工作需要转向c#,与c++更是渐行渐远。这次云课堂上看到有侯捷老师的课,果断报名,一来有意重新拾起c++,二来,也算是为当年使用盗版书籍还一笔债。
言归正传。
第一周的课程,或许与其他学员的感受不一样,更多的体会还是在于程序的设计思路。用侯老师的话来说,要编写大气的程序。
1. 防卫式声明。除了老师提到的宏定义的方式,还可以使用编译器预处理命令,如下图:
图中方法一的问题,是大型工程中,头文件定义比较多,很有可能出现宏定义重复,命名冲突,优点是跨平台;方法二,则是依赖于编译器, 不是所有编译器都支持。
2. 构造函数中尽量使用初始化列表。c#中也是同样的优先选择初始化列表。这里需要注意的是,c++中初始化的顺序,跟初始化列表中的顺序没有关系,只跟声明的顺序一致,所以遇到有依赖关系的初始化处理时,需要注意声明的参数顺序。
3. 尽量使用inline。目的是提高参数运行效率。inline可以理解为编译器直接替换了代码(是否正确?),省略了函数调用过程中出栈的消耗以及函数返回时的消耗。
3. 使用const。这里老师提到的是尽量使用。const可以用到的地方很多,目前课程中提到的只是参数,函数的返回值等等,这里有很多坑,以前踩过不少,后续需要进一步整理const的相关使用。
4. By reference。这里又可以细分,具体包括参数和返回值两部分。(其实这里对指针和引用的区别还是有一些疑惑,引用和指针的大多数情况下可以互换,这里提倡使用reference,是否是出于代码可读性及可维护性的考虑?)
除了上面老师提到的几个要点以外,从代码中也能看到大气代码的一些基本要求,比如函数及参数的命名。