#include<iostream>
int count_calls()
{
static int a = 0 ;
return ++a;
}
int main()
{
for(int i=0;i<10;i++)
{
static int b=0;
b++;
std::cout << count_calls()<<" "<<b<<std::endl;
}
static int a= 100;
std::cout<<a<<std::endl;
for(int i=0;i<10;i++)
{
static int b=0;
b++;
static int a= 100;
std::cout << count_calls()<<" "<<b<<std::endl;
}
return 0;
}
之前看这个代码有些疑问
1.函数重复调用了,那么静态变量是不是会重复定义或者变为赋值操作。
这个问题的原理应该和编译器还是预处理器有关吧,循环和函数重复调用时 静态变量定义和初始化的代码只运行一次。
2.函数里初始化了a,为什么在循环内还能初始化a。
这个就比较2b了,因为局部变量加上static之后它仍然是局部变量,作用域不变生存周期变长了而已。所以两个a不在相同的作用域,含义不同。
本文通过一个C++示例代码详细解析了静态变量的工作原理,包括静态变量在函数调用和循环中的行为特点,以及它们如何保持状态并在多次调用间持久化。
2万+

被折叠的 条评论
为什么被折叠?



