尽量不用#define这条语句,这条语句不认为是C++语言的一部分,而且在进行字符替换时会带来很多的问题。
原计划用define定义的普通常量 ,可以换成const定义的常量,如:const double ASPECT_RATIO = 1.653;
但是想用一个const常量定义原define宏定义的指针常量时,除了指针所指的类型要定义成const外,重要的是指针也经常要定义成const。例如,要在头文件中定义一个基于char*的字符串常量,你要写两次const:
const char * const authorName = "Scott Meyers";
此语句意思是指针地址和指针指向的变量内容都是不允许修改的。
定义在类内的const常量只能在类构造函数的初始化成员列表中初始化,不能在类体内赋值初始化,除非你定义的const常量是static 修饰的int型。例如: 类体内 这个语句const int NUM_TURNS=5 编译器会报错“only static const integral data members can be initialized within a class”,但是static const int NUM_TURNS=5 就是合法的。出了int其他的static const数据类型,在类体内只能声明,而不能赋值。这种常量赋值的地方应该在类的实现文件的函数体外,最好在构造函数的前面赋值 例如 const float NUM_TURNS=3.0;放在类的构造函数前面。如果你非得在类体内对一个非static的const int常量赋值,那么可以把该常量定义为enum ,例如在类体内:作如下声明是合法的:
enum { NUM_TURNS = 5 }
int [NUM_TURNS];
对于define定义的类似函数的宏,最好用内联函数替代,内联函数为前置inline 的函数声明和定义在一起的短小函数。内联函数提供类型检查,同样免除了若干系统调用的过程,得到较高的效率!