首页 > 代码库 > Const 和 Static

Const 和 Static

 

 中的两个功能:

这两个关键字可以一起使用,当一起使用时,它们的先后顺序是没有限制的,谁在前面都一样,const是指常量,static则表示静态变量,
它们一起使用时则表示一个静态常量.当你声明一个变量并初始化后,你不想在后面的程序中对该变量进行修改的话,你就可以用const
修饰符来修饰它,它告诉编译器这是一个常量,如果你对常量作了修改,编译的时候就会通不过,而静态变量则是在你声明之后,这个变量
就一直常驻内存,直到程序结束它才会被销毁,例如你在一个自定义函数中定义了一个静态变量,
当这个函数被调用结束,它里的静态变量依然存在,当第二次调用该函数时,这个变量并不会重新被分配内存,它的值则是上一次调用后它的值.
C++对static关键字的重用
主要指静态数据成员/成员函数。
表示属于一个类而不是属于此类的任何特定对象的变量和函数. 
这是与普通成员函数的最大区别, 也是其应用所在, 比如在对某一个类的对象进行计数时,
计数生成多少个类的实例, 就可以用到静态数据成员. 在这里面, static既不是限定作用域的,
也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性.
这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”的含义. 因为它是对整个类来说是唯一的,
因此不可能属于某一个实例对象的. (针对静态数据成员而言, 成员函数不管是否是static,
在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针. )

static数据成员的初始化:

(1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。

(2) 初始化时不加该成员的访问权限控制符private,public等。

(3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

(4) 静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。


Static成员函数

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数,这是由于静态的成员函数没有this指针