总体的描述就是: 可以给编译器处理的就不要交给预编译器
宏定义define属于预编译器处理的范围,const、enum、inline为编译器处理的范围
宏定义define:
1、在运用宏定义定义一个常量,一旦运用错误,则会提示所定义的常量错误,而不是宏定义本身错误
如#define PI 3.14a
double pi = PI
则编译时会提示3.14a错误,而不是PI错误
2、宏定义的作用域
宏定义没有作用域的概念,及时将其定义在类内,但是一样不受作用域的限制
3、不可以对define取地址
枚举enum
1、与宏定义define相比,有作用域
2、只能赋值为整数int,而宏定义可以为任何值
3、不可以对enum取地址
内联inline
#define max(a,b) (a)>(b)?(a):(b)
template<typename T>
line T max(const T& a,const T&b)
{
return a>b?a:b
}