条款02:尽量以const,enum,inline替换#define
Posted GGBeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条款02:尽量以const,enum,inline替换#define相关的知识,希望对你有一定的参考价值。
一、概述
尽量少用预处理器——宏替换
二、细节
1. 关于宏替换之常量
旧版本:#define N 10;
新版本:const int n = 10;
比较:#define不被视为语言的一部分,记号名称N在编译器开始处理源代码之前就被预处理器移走了。
补充:class的专属常量需要封装性,而#define不能提供封装性(它并不重视作用域)。
2. 形似函数的宏
旧版本:#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
新版本:template<typename T> inline void callWithMax(const T &a, const T &b) { f(a > b ? a : b); }
比较:旧版本中对于调用实参时有很大的约束,而且很复杂;而inline与它的效率相似但形式容易且不易出错。
补充:callWithMax是个真正的函数,它遵守作用域和访问规则;而你不能用宏写一个class的private成员函数。
3. enum的成员是const的,故可作为常量表达式
以上是关于条款02:尽量以const,enum,inline替换#define的主要内容,如果未能解决你的问题,请参考以下文章
条款2:尽量以const,enum,inline替换#define
Effective C++ 条款2:尽量以const,enum,inline替换#define
1.尽量以const ,enum,inline替换define
NO.2 尽量以const,enum,inline 替换 #define