尽量以const,enum,inline,替换#define
我们无法使用#define创建一个class专属常量。因为#define不注重作用域。也不能提供任何的封装性,也就是说没有所谓的private #define这样的东西。而const成员是可以被封装的。
一个const的地址是合法的,但取一个enum的地址就不合法,而取define的地址通常也不合法。
有了const、enum和inline,我们对预处理的需求降低了,但并非完全消除。#include仍然是必需品,而#ifdef/#ifndef也继续扮演控制编译的重要角色。目前还不到预处理器全面隐退的时候。但你应该明确的给予它更长更频繁的假期。
**对于单纯常量,最好以const对象或enum替换#define。
对于形似函数的宏,最好改用inline函数替换#define。**
尽可能使用const
const只是语言层面的限制,可以通过内存进行改变。