首页 > 技术文章 > C++中static关键字

itsfei 2020-10-24 09:22 原文

“static”,译成中文就是“静态的”

C++的static有两种用法:(1)面向过程;(2)面向对象。

前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。

 

用法一:

(1)全局静态变量

存储在静态存储区,在整个程序运行期间会一直存在,未经初始化的全局静态变量会被自动初始化为0。

(2)局部静态变量

存储在静态存储区,未经初始化的局部静态变量会被自动初始化为0。

注意:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变。

(3)静态函数

使用static修饰函数,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突。

用法二:

(4)修饰类的成员变量:

静态成员变量是类的所有对象中共享的成员,而不是某个对象的成员。对多个对象来说,静态数据成员只存储一处,供所有对象共用;

不依赖于类对象的存在而存在,对静态成员变量的引用直接用类名就可以

注意:静态成员变量必须在类定义的外面专门声明,声明时变量名前面加类名::,声明的同时可以初始化。如果没有声明,那么程序编译时虽然不会报错,但是在链接(link)阶段会报告“标识符找不到”,不能生成.exe文件。

(5)修饰类的成员函数:

在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。

如果静态成员函数中要引用非静态成员时,可通过对象来引用。(可不进行外置声明)

 

作用简单归纳总结一下:

1、设置变量的存储域

2、限制变量和函数的作用域

3、在类中的static成员变量意味着它为该类的所有对象所共享,也就是说当某个类的对象修改了该静态成员变量,其修改值为该类的其它所有实例所见;

4、在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

推荐阅读