static关键字
静态存储区
全局静态变量
在全局变量前加上关键字static,全局变量就定义成一个全局静态变量
.bss和.data静态存储区,在整个程序运行期间一直存在
未初始化的全局静态变量和全局变量会被自动初始化为0,存在.bss,初始化的在.data
作用域:全局静态变量在声明他的文件之外是不可见的,而全局变量其他文件可见,
局部静态变量?
局部变量之前加上关键字static
未经初始化的局部静态变量会被自动初始化为0,存在.bss,初始化的在.data;
作用域:作用域仍为局部作用域,但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过不能再访问,直到该函数再次被调用,并且值不变;
静态函数
函数返回类型前加static
函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明cpp中可见,不能被其他文件所用。
warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰;
类的静态成员
在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。对sizeof来说,静态数据成员只存储一处在静态存储区,不占对象大小,
类的静态函数
静态成员函数不是对象成员。因此,引用时不需要用对象名。
在静态成员函数的实现中不能引用类中的非静态成员,只能引用类中静态成员(