static

2018-08-02 05:43:51来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1.变量static

静态全局变量有以下特点:
? 该变量在全局数据区分配内存;
? 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
? 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的; 

静态局部变量有以下特点:

1 bool Load()
2 {
3   static bool bLoad  = false;
4   if(!bLoad)
5  {
6     //code1
7     bLoad = true;
8  }  
9   //code2
10 }

  

当我们想多次执行此接口,但是需要执行code1一次,多次code2时。

如果是bool bLoad = false,因为每次执行此接口时,都会给该bLoad分配栈内存,执行完释放栈内存,此变量失效,就无法达到想要的效果,

当为static bool bLoad  = false;因为是在全局数据区分配内存,不会被执行完释放,所以能到达想要的效果

? 该变量在全局数据区分配内存;
? 静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
? 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
? 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

2.函数static

定义静态函数的好处:
? 静态函数不能被其它文件所用;
? 其它文件中可以定义相同名字的函数,不会发生冲突;

3.类中的static

在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员,这样就出现以下作用:

(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致了它仅能访问类的静态数据和静态成员函数。

(2)不能将静态成员函数定义为虚函数。

虚函数是为了多态设计的....静态成员函数独立于对象存在,没有this指针...所以不能设计成虚函数.

(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊,变量地址是指向其数据类型的指针,函数地址类型是一个“nonmember函数指针”。

(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就产生了一个意想不到的好处:成为一个callback函数,

使得我们得以将C++C-based X W indow系统结合,同时也成功的应用于线程函数身上。

(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问时间,节省了子类的内存空间。

(6)静态数据成员在<定义或说明>时前面加关键字static

(7)静态数据成员是静态存储的,所以必须对它进行初始化。

(8)静态成员初始化与一般数据成员初始化不同:初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;

初始化时不加该成员的访问权限控制符privatepublic等;初始化时使用作用域运算符来标明它所属类;

所以我们得出静态数据成员初始化的格式:<数据类型><类名>::<静态数据成员名>=<>

(9)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。

这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:SPOJ KATHTHI - KATHTHI(01BFS)

下一篇:C++结构体与排列三平台出售