类外初始化
class Student {
private:
static int age;
}
int Student::age=20;
一般都是类内声明,类外初始化,因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的
不过,静态常量成员是可以在类内声明的
class Student {
private:
static int age=20;//错误,静态成员不能在类内初始化
const int age=20;//错误,常量成员也不能在类内初始化
static const int age=20;//正确
}
三种必须用初始化列表初始化的
- 非静态常量
- 引用类型
- 没有默认构造函数的类类型