C++中应避免使用#define,因#define没有作用域的概念,因此会破坏C++的封装性;另一方面,预处理器会在编译前将替换#define定义的常量,程序中没有了定义的标识符,会影响debug或crash问题的查找;另外被常量值替换了的常量出现在多处,就可能在多个位置存储,增加程序体积。C++中可使用const代替#define,避免上述问题。
如:
#define PI 3.1415926
应替换为:
const double PI = 3.1415926;
如果C++类中使用了数组,数组需要提前定义其大小,以往使用#define可以定义数组大小,怎么避免呢?
方法有二:
- 类中定义静态常量:
Stati.h:
class Stati {
private:
static const int ArrayNum = 5;//声明静态的数组大小常量
int StatiArray[ArrayNum];
};
Stati.cpp
const int Stati::ArrayNum;
- 使用enum枚举:
Stati.h :
class Stati {
private:
enum { ArrayNum = 100 };
int ArrayNum[ArrayNum];
};
还有一种#define定义宏的形式,主要为了提高运行效率及代码简洁,可以使用inline定义的函数模板代替。以避免
define定义宏可能产生的副作用:
#define GET_MAX(a, b) ((a) > (b) ? (a) : (b))
上述#define形式可替换为如下函数模板形式:
template<typename T>
inline const &T getMax(const T &a, const T &b) {
return a > b ? a : b;
}
网友评论