NO.2: 尽量以const,enum,inline 替换 #define

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 #include <iostream>
 2 
 3 //Effective C++ NO.2
 4 #define CALL_WITH_MAX(a,b) (a>b?a:b);
 5 
 6 template <typename T>
 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 Test
19 {
20 public:
21     //enum hack
22     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<<CALLWITHMAX(++a,b)<<std::endl;
40     //宏函数造成的2次叠加
41     std::cout<<CALL_WITH_MAX(++a,b);
42     return 0;
43 }

 

注意: 对于纯常量,尽量使用const,或者enum替代

          对于形似函数的宏,尽量使用inline替换

posted @ 2017-07-29 19:12  FeckCode  阅读(197)  评论(0编辑  收藏  举报