C/C++语言 static关键字的用法

来源:互联网 发布:切糕王子 知乎 编辑:程序博客网 时间:2024/05/19 23:24

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。



0 0