static关键字的作用
在C语言中:
修饰全局变量时:外延性(用static修饰后,全局变量就没有外延性,仅作用于本文件)
修饰局部变量时:局部变量使用static限定了变量的生命周期和存储位置,没有static修饰的局部变量存储在栈上,是auto类型(随时用随时开辟空间,用完销毁空间),static修饰的局部变量存储在data段的rw段(或bss段,看有没有初始化),static修饰的局部变量生命周期和main函数生命周期一样。
在C++中
static 在类内部的表现,用来实现簇类对象间的数据共享,在生成对象的时候,普通数据成员才有空间。而static修饰在类声明的时候,就已经开辟了空间(data rw),static 数据成员,既属于类,也属于对象,但终归属于类。
- 初始化
类内定义,类外初始化。 type 类名::变量名=初始化值 - static修饰成员函数,作用只有一个,用于管理static成员。
static修饰的成员函数,既属于类也属对象,但终归属于类
static修饰的成员函数,因为它属于类,所以没有this指针,不能访问非static数据成员及成员函数
class A
{
public:
void func()
{
cout<<share<<endl;
}
void modfiy(int m)
{
share = m;
}
int x;
int y;
static int share;
};
int A::share = 100;
int main()
{
A a,b,c;
cout<<"sizeof(A) = "<<sizeof(A)<<endl; //8
cout<<"sizeof(a) = "<<sizeof(a)<<endl; //8
cout<<"sizeof(b) = "<<sizeof(b)<<endl; //8
cout<<"sizeof(c) = "<<sizeof(c)<<endl; //8
a.func(); //100
a.modfiy(20);
b.func(); //20
c.func(); //20
return 0;
}