1. static
static 作⽤:控制变量的存储⽅式和可⻅性。
- 修饰局部变量:用static修饰过的局部变量,该变量会从栈区放到静态数据区,生命周期延长到整个程序执行结束,注意:其作用域没有发生变化。
- 修饰全局变量:改变了作用域范围,范围从整个工程变成了当前文件可见。
- 修饰函数:效果和修饰全局变量一样。
- 修饰类:static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因⽽只能访问类的 static 成员变量;static 成员变量属于整个类所拥有,对类的所有对象只有⼀份拷⻉;
- 静态⾮常量数据成员,其只能在类外定义和初始化,在类内仅仅只是声明。
2. const
const作用:不变
- 修饰基本数据类型:const可以放在基本数据类型前,也可以在其后,不影响结果,最终的效果都是让这些值无法被更改。
- 修饰指针变量和引⽤变量:如果 const 位于⼩星星的左侧,则 const 就是⽤来修饰指针所指向的变量,即指针指向为常量(指针常量)(底层const);如果 const 位于⼩星星的右侧,则 const 就是修饰指本身,即指针本身是常量(常量指针)(顶层const)。
- 修饰函数返回值:按照第1条和第二条规则进行修饰,const用在函数内部也是一样。
- 在类中的用法:const成员变量,只在某个对象生命周期是常量,对于整个类来说,是可以变的,对于对象来说是不可变的。const 成员的初始化只能在类的构造函数中进⾏。
const 成员函数,const 成员函数的主要⽬的是防⽌成员函数修改对象的内容。要注意,const 关键字和 static 关键字对于成员函数来说是不能同时使⽤的,因为 static 关键字修饰静态成员函数不含有 this 指针,即不能实例化,const 成员函数⼜必须具体到某⼀个函数。 - 修饰类对象:常量对象只能调⽤常量函数,别的成员函数都不能调⽤。
- const 成员函数中如果实在想修改某个变量,可以使⽤ mutable 进⾏修饰。成员变量中如果想建⽴在整个类 中都恒定的常量,应该⽤类中的枚举常量来实现或者 static const。