与 static 相关的总结

来源:互联网 发布:php des加密解密 编辑:程序博客网 时间:2024/05/22 15:37

1.变量声明为static后存储在静态存储区,未初始化的静态变量会被自动初始化为0。

2.对于局部静态变量的作用域范围是当定义它的函数或者语句结束时,作用域结束;对于全局静态变量,作用域的范围是从定义处开始到程序结束。

注意:局部静态静态变量的生存期是从定于开始到程序结束。全局静态变量在其他文件是不可见的。

3.在C++中,static 数据成员和普通数据成员一样遵循public,protected,private 访问规则。静态数据成员被当做类的全局对象,无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一个备份,由该类类型的所有对象共享访问。

同全局对象相比,使用静态数据成员有两个优势:
静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性。
静态数据成员可以实现信息隐藏。静态成员可以是 private 成员,而全局对象不可以。
静态数据成员的唯一性本质(独立于类的任何对象而存在的唯一实例),使它能够以独特的方式被使用,这些方式对于非static数据成员来说是非法的。

4.静态成员函数。在类的成员函数返回值之前加上关键字static,它就被声明为一个静态成员函数。静态成员函数不能声明为const 或volatile,这与非静态成员函数不同。
定义:出现在类体外的函数定义不能指定关键字static。
作用域:主要用于对静态数据成员的操作。
静态成员函数与类相联系,不与类的对象相联系。
静态成员函数不能访问非静态数据成员,因为非静态数据成员属于特定的类实例。
静态成员函数没有this指针,因此在静态成员函数中隐式或显式地引用这个指针都将导致编译时刻错误。试图访问隐式引用this指针的非静态数据成员也会导致编译时刻错误。
访问:可以用成员访问操作符(.)和箭头(->)为一个类实例或指向类实例的指针调用静态成
员函数,也可以用限定修饰符名直接访问或调用静态成员函数,而无需声明类实例。