C++中Static的作用
Static关键字,在C++中可以用来修饰变量和函数,变量又分为全局变量、局部变量、成员变量,而函数也分为普通函数和成员函数,下面具体说说不同使用情况下的作用。
一、全局静态变量
static修饰全局静态变量后:
(1)在全局数据区内分配内存
(2)如果没初始化默认值为0
(3)该变量在文件内可见
二、定义局部静态变量
(1)仍在全局数据区内分配内存
(2)如果不显示初始化,那么将被隐式初始化为0
(3)它始终驻留在全局数据区,直到程序运行结束
(4)作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束
如下例子:
1 #include <iostream> 2 3 using namespace std; 4 5 void test(){ 6 static int i; 7 i+=5; 8 cout<<i<<endl; 9 } 10 11 int main() 12 { 13 test(); 14 test(); 15 return 0; 16 }
其结果为:
5 10
可见,虽然i离开作用域,但仍驻留在全局数据区,直到程序运行结束,且多次调用,只初始化一次。
三、静态数据成员
(1)内存分配:在程序的全局数据区分配,所有对象包括派生类对象共享
(2)初始化和定义:静态数据成员定义时要分配空间,所以不能在类声明中初始化。
1 #include <iostream> 2 3 using namespace std; 4 5 class Statictest{ 6 public: 7 static int i;//声明但未定义 8 }; 9 10 int Statictest::i = 1;//定义同时初始化 11 12 int main() 13 { 14 cout << Statictest::i << endl; 15 return 0; 16 }
四、静态函数
(1)只能在文件中使用
(2)inline函数默认为static
五、静态成员函数
(1)静态成员函数不能访问非静态数据成员
(2)可直接通过类名调用
(3)没有this指针