- C/C++中static关键字主要有三种使用方式, 其中第三种只在C++中使用:
(1)局部静态变量
(2)全局静态变量/函数
(3)静态数据成员/成员函数
- 下面就这三种使用方式分别说明
(1)局部静态变量
在C/C++中, 局部变量按照存储形式可分为三种auto(普通), static(静态), register(寄存器)
static局部变量与auto类型(普通)局部变量相比 有以下差别:
- 存储空间分配不同
auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放,
而static分配在静态存储区, 在程序整个运行期间都不释放.
- static局部变量在所处函数初次运行时完成初始化工作, 且只操作一次,auto类型(普通)局部变量在所处函数每次运行时动态存储区空间
- 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符,而auto类型的初值如果不赋初值,是不确定的. (对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)
(2)全局静态变量/函数
为了限制全局变量/函数不能被其它文件访问,全局变量/函数前加static使得函数成为 全局静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于所处文件。
使用全局静态变量/函数的好处是:不同的人编写不同的全局变量/函数时,不用担心自己定义的全局变量/函数,是否会与其它文件中的函数同名。
(3)静态数据成员/成员函数(C++特有)
C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量/函数。这是与普通成员变量/成员函数的最大区别。在这里面, static既不是限定作用域的, 也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性.
阅读(1203) | 评论(2) | 转发(0) |