静态变量可以多次初始化吗?

时间:2019-06-14 18:28:03

标签: c++

我已经读过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

我在这里想念什么吗?

3 个答案:

答案 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)相同。