c++中static关键字的作用可以用两个属性归纳它,一个是作用域,一个是生存周期。
静态局部变量:
作用域:函数体内
生存周期:整个程序运行期间
静态全局变量:
作用域:文件内部
生存周期:整个程序运行期间
静态函数:
作用域:文件内部
生存周期:整个程序运行期间
静态数据成员:
作用域:类内部
生存周期:大于class的对象
静态成员函数:
作用域:类内部
生存周期:大于class对象
下面是它们各自的特点:
静态局部变量:随着第一次函数的调用而初始化
静态全局变量:定义在函数体外,用于修饰全局变量,表示该变量只在文件内部可见,起到文件隔离的作用
静态函数:同上,文件隔离
静态成员:属于类不属于对象
静态成员函数:属于类不属于对象,可以通过对象调用,也可以用类名::函数名访问
1.静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
2.非静态成员函数可以任意地访问静态成员函数和静态数据成员;
3.静态成员函数不能访问非静态成员函数和非静态数据成员;
4.调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以用类名::函数名调用(因为他本来就是属于类的,用类名调用很正常)
值得一提的是,static不占用class的内存空间