一般而言,类的static成员,像普通数据成员一样,不能在类的定义体中初始化。相反,static数据成员通常在定义时才初始化。
这个规则的一个例外是,只要初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化:
class Account
{
pubic:
static double rate(){return interestRate;}
static void rate(double);
private:
static const int period = 30; //interest posted every 30 days
double daily_tbl[period]; //OK; period is constant expression
};
用常量值初始化的整型const static数据成员是一个常量表达式。同样地,它可以用在任何需要常量表达式的地方,例如指定数组成员daily_tbl的维数。
const static数据成员在类的定义体中初始化时,该数据成员还是必须在类的定义体之外进行定义。定义时不必再指定初始值:
const int Account::period;