1、const与enum代替#define定义常量:
#define ABC 12.3; //宏一般全大写
const Abc = 12.3;
原因:
a) ABC
在预处理阶段被12.3代替,因此ABC
不会进入符号表,调试错误只会显示12.3
,因此会造成不必要的疑惑,浪费时间。
b) #define
的替换相比定义const
常量会导致较多的代码量;
c) #define
不重视作用域,不能实现类内常量。
const、enum的具体使用方法见链接:类内如何声明静态变量,常量问题与头文件声明变量重复定义问题
2、inline函数代替#define宏函数:
#define FUNC(x,y) a>b? a : b //宏函数
template<typename T>
inline T func(const T& a,const T& b){ return a>b? a : b; } //内联函数模板
原因:
a) 有类型检查,保证安全性。
b) 计算流程不会出错。
参考资料:Effective C++ 条款02
总结
1、尽量以const、enum、inline代替#define。