C++中的static关键字

首先要了解作用域与生存期。

作用域就是一个变量可以被引用的范围,如:全局作用域、文件作用域、局部作用域。
而生命周期就是这个变量可以被引用的时间段。

——全局变量静态全局变量静态局部变量局部变量
作用域文件作用域(多)文件作用域(单)局部作用域局部作用域
生命周期静态生命期静态生命期静态生命期局部生命期

文件作用域:从说明点开始,延伸到源文件结束。也称为全局作用域。多:其他文件可见。单:只有当前文件可见。

局部作用域:从声明点开始,到块结束处为止。

静态生命期:与程序的运行期相同,只要程序一开始运行,变量就存在,程序结束,变量销毁。

局部生命期:开始于程序执行经过其声明点时,结束于其作用域结束处。

Static 作用一、 隐藏

比如全局变量与静态全局变量:

全局变量可以被其他的源文件引用声明(extern),但静态全局变量只能在当前定义文件中使用,对于其他文件不可见。

对于函数,static只有隐藏功能。

Static作用二、保存变量内容
static变量只会初始化一次,然后就保存修改。比如;

#include<iostream.h>

static int v;//静态全局变量

void addm(int m)
{
	static int c;//静态局部变量
	c++;
	cout<<"c="<<c<<endl;

	v++;
	cout<<"v="<<v<<endl;

	m++;
	cout<<"m="<<m<<endl;
}
void main()
{
	static int m=1;//静态局部变量
	cout<<"//"<<endl;
	addm(m);
	cout<<"//"<<endl;
	addm(m);

}

在这里插入图片描述
PS:如果作为static局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。main函数中的变量m与 addm函数中的变量m不是一个,他们都是局部变量。

Static作用三、默认初始化为0(static变量)

Static作用四、C++中的类成员声明static

静态数据成员是类的成员,而不是对象的成员
(1)类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。

(2)不能将静态成员函数定义为虚函数。

(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊 ,变量地址是指向其数据类型的指针
,函数地址类型是一个“nonmember函数指针”。

(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就
产生了一个意想不到的好处:成为一个callback函数,使得我们得以将C++和C-based X W
indow系统结合,同时也成功的应用于线程函数身上。 (这条没遇见过)

(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问 时间,节省了子类的内存空间。

(6)静态数据成员在<定义或说明>时前面加关键字static。

(7)静态数据成员是静态存储的,所以必须对它进行初始化。 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)

(8)静态成员初始化与一般数据成员初始化不同:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值