宏在C++中的替代解决方案
1. 常量定义
例如:
#define NUM 100
替换为
const int NUM = 100;
const常量放在头文件中,也不必担心存在多个实例的问题,对于const修饰的变量,编译器一般也会对其进行优化,不会出现多重定义的问题。
C语言中还有一个特殊的常量定义:NULL。其一般的定义为 #define NULL 0,指针的内容却是一个整型,这不符合常理。所以在C++11中使用nullptr代替了NULL。
2. 函数定义
宏只是在代码中做字符串替代展开,所以,用宏定义的函数,实际上并没有减少代码的体积。
#define square(x) (x*x)
替换为
inline int square(int value)
{
return value*value;
}
或者
template <class T>
inline T square(T& value)
{
T square(T& value);
}
3. 类型重定义
#define unit_32 unsigned int
替换为
typedef unsigned int unit_32;