c++ static

在c++ 中 static 关键字有几种不同的用途,但通常都与存储期和可见性、链接行有关

1. 静态局部变量

当static用于函数内的局部变量时, 他改变了变量的存储期, 这样的变量在执行过程中只被初始化一次, 并且在函数调用之间保持其值 , 这也就意味着静态局部变量的声明周期从它被初始化直到程序结束 。

void function()
{
	static int count = 0 ; 
	counter++ ; 
	std::cout<< counter <<std::endl ; 
}

在这里插入图片描述
每次调用function 时 count的值不会被重置 , 它将保留上一次调用的值 。

2. 静态类成员

static 也可以用于类的成员变量和成员函数
静态成员变量: 不属于类的任何单个实例, 而是类的所有实例共享的数据。 静态成员变量有一个独立的空间,通常用于类的所有对象共享的常量数据或者跟踪类的实例数 。

静态成员函数: 可以不依赖类的实例而被调用, 他们不能访问类的非静态成员, 因为他们不属于任何对象实例

#include <iostream>
class Test {
public: 
	static int staticvalue  ; 
	static void staticfunction()
	{
		std::cout << "this is staticvalue " << staticvalue <<  std::endl;
	}
};
 int Test::staticvalue = 10;  //在类外初始化静态成员变量
int main()
{	
	Test::staticfunction(); 
	return 0;
}

3.静态全局变量和函数

在文件的全局范围内使用 static 意味着该变量或者函数的链接行变为内部 , 这意味着它只能在定义它的文件进行访问,而不能在其他文件进行访问 。 这将有助于i封装,因为它限制了对静态全局变量或者函数的访问范围

4.为什么static只能初始化一次

在c++ 所有的对象(包括静态变量) 都只能初始化一次 , 而静态变的存储周期比较长 ,一旦初始化之后,没有被销毁 , 就会保存在内存区域之中 ,所以不会被初始化 , 一般是与程序共存亡 , 而auto变量,它是存储在栈区的,一旦函数调用结束后, 就会被销毁 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值