C/C++中static关键字可以从以下三个方面理解
1,static 修饰变量的存储区特性
static int a;
本质意义为static修饰的变量被分配在静态存储区,不是在栈上,也不是在堆上。
所以有以下应用场景。
1,C语言中,会在初次运行的时候进行初始化,整个程序运行期间都不释放。
如果变量为C++ 类对象,则在main()之前执行构造函数,进行初始化。
2,由于存储区不是在栈上,所以函数中用static修饰的局部变量就有“记忆性”。
也就是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的值.
2 ,static修饰函数/变量的作用域特性
//file1.c
static int a;
static void foo();
用static修饰的函数或者变量,只能在定义它的文件内被使用。
这样不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。
3 ,C++的引申扩展含义
C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数.
与普通成员函数的最大区别, 是static修饰的变量/函数在此类中的唯一性.
这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”。
例如:
class myclass
{
public:
static int getNumber() {return mNum};
private:
static in mNum;
};
myClass A, B;
则A,B 中只有一份nNum,它既不属于A,也不属于B。