我已经读过c / c ++中的静态变量仅初始化一次。
但是当我尝试尝试它时。我发现它们可以多次初始化
#include <iostream>
#include <string>
using namespace std;
void demo(int value)
{
// static variable
static int count = 0;
count = value;
cout << count << " ";
}
int main()
{
for (int i=0; i<5; i++)
demo(i+1);
return 0;
}
在上面的代码中,我初始化的静态变量多次计数。
上面的代码输出是:1 2 3 4
我在这里想念什么吗?
答案 0 :(得分:10)
count = value;
不是初始化,而是分配。静态变量可以分配任意多次。
static int count = 0;
是初始化过程,无论您调用demo
有多少次,它仅发生一次。
答案 1 :(得分:1)
任何变量只能初始化一次。静态在这方面没有什么不同。静态局部变量的特殊之处在于它们的值在函数调用之间保持不变。当然,只有在初始化函数的行仅在第一个函数调用上执行时,这才有意义。考虑以下示例:
#include <iostream>
#include <string>
using namespace std;
void demo()
{
// static variable
static int count = 0;
std::cout << ++count << " ";
}
int main()
{
for (int i=0; i<5; i++) demo();
return 0;
}
它打印
1 2 3 4 5
因为static
中的static int count = 0;
意味着:仅在函数count
的第一次调用时才使用0
初始化。
答案 2 :(得分:0)
当变量声明为静态变量时,将在程序的整个生命周期内为其分配空间。
即使多次调用该函数,静态变量的空间也只会分配一次,并且上一次调用中的变量值将通过下一个函数调用进行传送。
count = value;
->这是赋值,在这种情况下,静态变量的行为与其他数据类型(例如int)相同。