【技术类】static

static关键字是我们在c/c++中常用的一个,应用它之后会有一定的效果。单放在那,没什么意思。主要用来修饰我们的变量和函数。
一.修饰变量

1.全局变量

static int global1 = 1;
static int global2;

1.被static修饰之后,这两个变量的访问权限就只能是在本文件中,工程下的其他文件不可见。
2.其次,未初始化或者初始化为0的变量被放置在bss段。
3.生命周期直至程序结束。

2.局部变量

void fun()
{
	static int t1 = 2;
	static int t2;
}
1.这两个变量的访问权限就只能在本函数中,每次调用该函数,t1,t2还是上次调用结束了的值。
2.同样满足上面第二条,第三条。

3.类中变量

class Test
{
public:
	static int inner;
};
int Test::inner = 2;
1.类中被static修饰的变量属于该类拥有,该类的所有对象都可以访问。
2.必须在类外初始化,否则编译错误。
3.这玩意是属于类的,因此它被放在data段。
二.修饰函数

1.普通函数

//Test.cpp
static void fun()
{
	cout<<"global fun"<<endl;
}

//Main.cpp
extern void fun();
void main()
{
	fun();
}
1.链接错误,因为fun只在Test文件中可见,main中找不到fun的实现。
2.既然仅本文件可见,那么其他文件中的static void fun();函数就可以同时出现。

2.类中函数

class Test
{
public:
	static void fun()
	{
		cout<<" class inner fun"<<endl;
	}
}
1.我们已知用对象调用类的非静态函数时,编译器会隐式的将对象的this指针传入要调用的函数。
但是,static函数是属于类的。因此一般我们通过Test::或者以对象的形式来调用static类方法。
2.因为它不需要this指针,因此我们不能在static类方法中访问成员或者调用非静态函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值