1、宏定义发生在预处理阶段采用符号直接替换原则。当设计这方面代码出错,有时候会令人费解。所以在C++里面尽量通过const和inline代替定义常量的宏定义。
#define PI 3.1415
const double PI = 3.1415;//代替上述define
2、定义常量指针
const char * const myname = "wang";//myname的数值和指向的内容都不可以改变。
3、类的专属常量,将这个常量作用域限制在类内。
对于类内专属常量且为static整数类型,只要不取它们地址,可以仅仅声明无须提供定义式。
class GamePlayer{
private:
static cosnt int NUM = 5;//常量声明
int scores[NUM];//使用常量
}
const int GamePlayer::NUM;//定义,通常放在实现文件。因为声明获取初始化值,那么定义时不可在设定初始值。
4、枚举常量
class GamePlayer{
private:
emun{ NUM = 5};//定义枚举常量
int scores[NUM];//使用枚举常量
}
5、形似函数的宏定义
#define MAX(a , b) ((a)>(b))?(a):(b)
/*
上述定义很多缺陷。
int a = 5 , b = 0;
MAX(a++ ,b);//a递增两次
MAX(++a , b+10);//a递增一次
可以不符合所需求的功能
*/
对于上述出现的缺陷,完全可以用内联函数替换解决宏定义产生的问题。
inline int max(int a , int b)
{
return a>b ?a : b;
}