4月份的任务之一是《Effective C++》这本书看完,这是22年的第二本书籍阅读计划,但最终只看到第30讲,五月份继续看,这里先对前面的内容做一些总结。这篇总结第一章节的内容——让自己习惯C++
-
01:视C++为一个语言联邦
这个条款的意思是,c++包含很多内容,是一个支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言,我们可将C++语言看作是多个次语言的联邦(结合体),我们只需要单独去遵守每个次语言的守则即可,不同次语言可能差别较大,但不会相互影响。主要的次语言有以下几个:
① C语言。C++作为C语言的衍生,完全兼容C的编程规范。
② 面向对象的C++。这是C++区别于C语言单独发展出来的部分,包含类对象的封装、继承、多态等等这些内容。
③ 模板C++。这是C++泛型编程部分,即模板元编程。这是高阶内容了,目前还处于使用阶段,实践中用的也较少。
④ STL(标准模板库)。C++ STL是非常重要的,灵活使用STL提供的容器和算法能节省你大量的时间。
以上总的来说,模板C++接触的较少,其他三部分是需要熟练掌握的。 -
02:尽量以const, enum, inline替换#define
预定义宏的问题在于它在预处理阶段被解析,这样编译器无法发现它存在的问题,使用const能达到同样效果的时候,比如单纯的常量,尽量使用const。对于形似函数的宏,使用inline 更好。这样方便在编译期就能发现问题所在,对应的符号也能正确被解析到符号表内。 -
03:尽可能使用const
这个条款的意思是,我们需要给那些不应该被修改的变量、对象或函数添加const属性,这样能避免不期望的修改发生,同时编译器也可以侦测出非法修改的错误。此外,当non-const和const成员函数处理逻辑等价时,应该让non-const成员函数调用const成员函数,以避免代码重复。 -
04:确定对象被使用前已被初始化
①对内置类型进行手动初始化,例如int,float等等
②构造函数尽量使用成员初始化列表而不是函数体内赋值,以减少拷贝次数;
③为避免“跨编译单元之初始化次序问题”,用local static对象替换non-local static对象,总之就是不要去访问一个你不确定已经被初始化的non-local static对象,而是将获取该对象的方式改为访问一个函数,这个函数在被第一次调用时进行local static对象构造并返回,后续调用直接返回该对象的引用。
以上。