C++中的静态局部变量

1  静态局部变量在静态存储区内分配存储单元。在程序运行期间都不释放。

2  对静态局部变量是在编译时赋初值的,即只赋值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上一次函数调用结束时的值。

3  静态局部变量,如果定义的时候没有赋初值,编译时自动赋初值0或者空字符。

4  静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它,在其他函数中,它是"不可见"的。

#include <iostream>
void func();
int main()
{
	func();
	func();
	func();
	return 0;
}


void func()
{
	static int n = 10;
	n = n + 1;
	std::cout << "静态局部变量n的值为:" << n << std::endl;
}
	

运行结果:

 

分析:

静态局部变量初始化一次之后,再次调用不会重新初始化,保留的是最后一次的计算结果。

### C++ 静态变量与局部变量的区别和用法 #### 定义位置差异 静态成员变量属于类的一部分,在所有对象间共享同一份实例。定义通常位于类外部,初始化可以在声明时完成[^1]。 对于局部变量而言,这些变量仅在其被声明的作用域内有效——比如函数内部或特定代码块中。每次调用该作用域时都会创建新的局部变量副本,并且当离开这个作用域之后就会销毁它们。 #### 生命周期区别 由于静态数据成员在整个程序运行期间都存在并保持其值不变(除非显式修改),因此具有全局生命周期特性;而普通局部变量则遵循自动存储期原则,即进入相应作用范围时分配空间,退出时释放资源。 #### 初始化方式不同 如果静态成员能够直接赋初值,则无需通过构造函数来设置,默认情况下可以直接在定义处给予初始值: ```cpp class Example { public: static int count; }; int Example::count = 0; // Initialize outside the class body. ``` 相比之下,常规意义上的局部变量会在每次执行到所在语句时才进行初始化操作,而且一般不允许提前指定默认值(除了某些特殊情况下的常量表达式)。 #### 存储位置上的差别 静态成员因为要维持整个应用程序周期内的状态,所以会被放置于全局/静态区而非栈上;相反地,普通的局部实体则是存放在堆栈之中以便快速进出内存管理机制处理。 #### 访问权限说明 尽管两者都可以设定为私有(private)、保护(protected) 或公开(public),但是静态成员可以通过类名加上双冒号运算符(`ClassName::`)的形式从外界访问,即使它是private属性也不例外。然而,局部变量永远不可能超越其所限定的封闭环境之外去获取引用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值