#define是由预编译器处理。
我们无法利用#define创建一个class专属常量,因为#define并不重视作用域。一旦宏被定义,它就在其后的编译过程中由效(除非在某处被#undef)。这意味#define不仅不能够用来定义class专属常量,也不能够提供任何封装性,也就是说没有所谓private #define这样的东西。而当然const成员变量是可以被封装的。
要点:
1.对于单纯常量,最好以const对象或enum替换#define
2.对于形似函数的宏,最好改用inline函数替换#define