【02】以 const enum inline 代替 #define
1 // 2 // 2015-03-04 02/55 3 // 以 const enum inline 代替 #define 4 // 5 6 // 防止同一个物理文件被包含多次 7 #pragma once 8 9 // ---------------------------------- 10 // 1. 尽量使用 const 11 // ---------------------------------- 12 13 class foo 14 { 15 public: 16 foo(); 17 private: 18 19 // 下面是 _count 的声明式,对于简单类型、class专属 20 // 的变量,可以在声明时指定初值,但这仍不是定义式。 21 static const int _count = 0; 22 }; 23 24 // 多数情况只提供 _count 的声明已经足够,如果确实编译器需要 25 // 定义式,下面就是定义式,这种定义式应该放在 cpp 文件中, 26 // 否则由于文件包含出现多次,就会引起 redefinition 的编译错误, 27 // 即使没有编译错误也会有链接错误。 28 29 // const int foo::_count; 30 31 32 // ---------------------------------- 33 // 2. enum 补偿法 34 // ---------------------------------- 35 36 // 旧式编译器如果不允许在声明时给 _count 指定值,那么只能将 37 // const int foo::_count = 0 放在 cpp 文件中了。但是这样 38 // _count 的值就不能在编译时已知了,不能作为数组的大小,下面 39 // 的 the enum hack 方式可以补偿,如下: 40 41 class bar 42 { 43 public: 44 bar(){} 45 46 private: 47 enum {COUNT = 5}; 48 int _arr[COUNT]; 49 }; 50 51 // ------------------------------------------ 52 // 3. inline 代替函数类型的 #define 53 // ------------------------------------------ 54 55 #define max(a, b) ((a) > (b) ? (a) : (b)) 56 57 // 上面的 #define 遇到自加 ++ 符号时显然会有问题 58 // 例如 max(a++, 10),a++执行的次数跟a的大小相关。 59 // 用 inline + template 可以很好的解决,如下: 60 61 template<typename T> 62 T max(T a, T b) 63 { 64 return a > b ? a : b; 65 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。