1.首先#define 定义不重视作用域(scope),虽然可以#undef控制,但是不美观,还存在多次替换的问题,以及没有任何封装性.
2.const XXX_XX,保证其常量性以及可控的作用域,如果是指针类型则 const XXXX* const ptr="hello world",也可以完美替换#defin
3.enum hack 替换数组大小问题,和#define 一样不会导致非必要内存(只有在声明enum类型时有内存)
4.宏函数会产生很多问题,没有对参数的各种限制,而inline可以很好的解决
C/C++:
1 #include2 3 //Effective C++ NO.2 4 #define CALL_WITH_MAX(a,b) (a>b?a:b); 5 6 template 7 inline int CALLWITHMAX(T a,T b) 8 { 9 return a>b?a:b;10 }11 12 13 14 15 #define STR "Hello Wolrd"16 const char *const str = "Hello Wolrd";17 18 class Test19 {20 public:21 //enum hack22 enum{SIZE=20};23 int Array[SIZE];24 25 //旧版编译器可能需要类外初始化static,不能给数组大小赋值26 static int size;27 };28 29 int Test::size=20;30 31 32 33 34 35 int main(int argc, char **argv)36 {37 int a=2,b=1;38 //inline没有问题39 std::cout< <
注意: 对于纯常量,尽量使用const,或者enum替代
对于形似函数的宏,尽量使用inline替换