静态变量属于静态存储方式,其存储空间为内存中的静态数据区。该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),直到整个程序运行结束,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放。
static作用可以总结如下几点:
1.函数听日static变量的作用范围为函数体内,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍能维持上次的值。
2.在模块内的static全局变量可以被模块内的其他函数调用买这个函数的使用范围被限制在声明它的的模块内
3.模块内的static函数只能被这一模块内的其他函数调用,这个函数的使用范围限制在声明它的模块内。
4.在类中的static成员变量属于整个类所有,对于类的所有对象而言共享,只有一份复制
5.在类中的static函数属于整个类所有,这个函数不接受this指针,因此只能访问该类的static成员变量。
如下所示,说明第五点的情况:
class A{ public: static void show(){ cout<<a<<" "<<b<<endl; } private: static int a; int b = 11; }; int A::a=10; int main() { A aa; aa.show(); return 0; }
15 12 C:\Users\Administrator\Desktop\未命名1.cpp [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11 C:\Users\Administrator\Desktop\未命名1.cpp In static member function 'static void A::show()': 15 12 C:\Users\Administrator\Desktop\未命名1.cpp [Error] invalid use of member 'A::b' in static member function 11 18 C:\Users\Administrator\Desktop\未命名1.cpp [Error] from this location