【发布时间】:2017-09-12 03:29:07
【问题描述】:
一个最小的工作示例如下:
#include <iostream>
void func()
{
static int i = 5;
std::cout << i << std::endl;
i = 42;
std::cout << i << std::endl;
}
int main( int argc, char ** argv )
{
std::cout << "this is main()" << std::endl;
func();
func();
return 0;
}
它的输出如下:
this is main()
i is 5
i is 42
i is 42
i is 42
变量int的Static修饰符使int的值在整个进程的生命周期内保持不变,而静态存储不存储在堆栈;因此,该值从函数的一次调用传递到另一次调用。
然而,当 func() 被第二次调用时,int 在 func() 开头被重新赋值为 5时间。
那么,为什么这个例子输出的是i = 42而不是i = 5?
【问题讨论】:
-
因为静态变量只初始化一次。
-
我作为新手正在试验代码;但是,我认为你是对的。我相应地改变了问题。我不能投票;因此,谢谢。
-
它没有。你误解了你的证据。
标签: c++ static initialization variable-assignment modifiers