Effective C++读后感:以const,enum,inline替换#define

来源:互联网 发布:论语别裁 南怀瑾 知乎 编辑:程序博客网 时间:2024/06/05 08:22

        尊重原创,转载请标明出处:http://blog.csdn.net/byperseverance/article/details/44544185

        Effective C++是一本Scott Meyers十多年来一直坚持写的书 ,也是国内评价非常高的一本书。作为一个C++入门级的我在幸拜读此书,特在此按个人理解重新总结一下要点,也算是加深一些记忆。我也刚好看到了云风的博客,有他对此书的评价:“总觉得书里讲的太细,太多观点本是好的,只是局限在了 C++ 语言中。明明是 C++ 的缺陷,却让人绞尽心力的回避那些问题,或是以 C++ 独特的方式回避。在别的语言中不该存在的问题,却成了 C++ 程序员必备的知识。人生苦短,何苦制造问题来解决之。”,然后自己也看了这本书的前几页,感觉云风说得一针见血。当然作为C++的使用者,我觉得既然已经在使用这门语言,大师们教会我们用更合理的方式回避本身存在缺陷,何乐而不为。而后面的叙述我也不会太详细,因为一本好书,我觉得大家还是值得亲自看看的。

       

       #define,无论是作为C还是C++,我相信一个使用过这两种语言的程序员们都必然使用过。Effective C++作者介绍了某些使用场景,让我们用合理的方式去代替换#define。

       1,用const代替简单的常量宏,原因宏由预编译解释掉了,并没有记录到编译信息的(symbol table)里,所以在编译出错的时候,会带来些困惑,无法快速定位错误所在。关于这点后面作者还说了在类里可以用static const定义来代替,以及采用枚举的巧妙用法。

       2,用inline函数代码形似函数的宏。原因有二,一是来避免忘记加括号带来函数展开后改变本意的运算顺序;二是在引用宏的时候,用带有++,--,或其它运行表达式作为参数,导致意外的结果。而inline和宏两者是有区别的,宏是在预编译过程中简单字符串的替换,而inline可以有返回值,有参数类型检查,作为函数有进出栈的过程。使用两者的目的就是节省在调用上的时间和空间的开销。


0 0