介绍

const表示常量,属于只读"变量"(其实是常量),生命周期是局部型。
static表示静态变量,属于可读可写变量,生命周期是全局型(不考虑编译器优化)。
显然,两者属性是不一样的

类中

下面代码中

  • static int: 在类中只有声明,并没有为其分配空间,所以static只能在类外初始化,并且是该块内进行初始化(不太好理解,相当于可以访问的域中)。
  • const int: 是声明加定义,有空间,可以类内初始化,但是构造函数中初始化会覆盖掉原来类内初始化。并且构造函数中只能用“冒号”的方式进行初始化,因为const类型的是不可修改的值。
  • static const int: const是声明加定义,所以有空间,可以在类内初始化;还有就是,在类中直接初始化的必须是const。
class A{
private:
	const int ci;
	static int si;
	static const int sci; // 与 const static int是一样的
public:
	A():ci(1){
		// ci = 10; // 在这里初始化是报错的,只能用上一行的初始化方法
	}
};
// 正确初始化static型变量
int A::si = 100;
const int A::sci = 200;
int main(){
	// int A::si = 100; // 报错
	// const int A::sci = 200; // 报错
	return 0;
}

表格

static const static const
类内初始化 不可以 可以 可以
生命周期 全局型 局部型 局部型
定义与声明 分离 不分 不分
该类所有对象的值 相同但可变 不同但不变 相同且不变
访问方式(公有情况下推荐) 类::变量 对象.变量 类::变量