对于宏定义是发生在预处理的阶段,会出现许多预想不到的失误。所以:
1、对于单纯的常量最好采用const对象或enums替换
2、对于行似函数的宏定义采用inline替换
通常我们需要声明一个类的成员数组,然而并不能直接的在类里面声明:
class test
{
int scores[100];
}
以上是错误的写法。
1、可以:
class test
{
static const int num = 100; //这是声明
int scores[num];
}
2、或者:
class test
{
enum {num = 100};
int scores[num];
}
对于方法1,通常C++需要对使用的任何东西都提供一个定义,但是一个类的专属static常量除外,只要不取地址,就可以直接声明使用,若是要取地址,需要在实现文件里面提供一个定义,然而这个定义不需要再设初值,声明的时候已经设置了。如:
const int test::num;
有的编译器不支持在声明的时候直接赋值。所以需要在类之外赋值。
对于方法2,某些时候比较像define,因为取一个const的地址合法,取enum的地址就不合法。