条款2:尽量以const, enum, inline替换#define
原因:
1. 追踪困难,由于在编译期已经替换,在记号表中没有。
2. 由于编译期多处替换,可能导致目标代码体积稍大。
3. define没有作用域,如在类中定义一个常量不行。
做法:
可以用const发挥常量的作用。
enum也可:取enum定义的变量地址不合法,取宏也是;而取const变量则合法。
而宏函数的做法,也可以用template加inline替换。
ps:但#include和#ifdef等仍然无可替代。
读后感:
define的确是奇淫技巧一般的存在;
但在编译期替换会导致运行期难以追踪调试,类型检查没有,宏函数的替换可能破坏cpp中的函数式编程。
我想,宏在cpp中可以用模板来很好地代替吧。
【本文章出自博客园willaty,转载请注明作者出处,误差欢迎指出~】