[英]Why does the static modifier prevent its variable to be reassigned with a new value?
一个最小的工作示例如下:
#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的 静态修饰符使int的值在整个过程的生命周期中保持不变,而静态存储未存储在堆栈中; 因此,该值是从函数的一次调用传递到另一次的。
然而,INT被重新指派到5的值在FUNC的()的开始时FUNC()被调用两次。
那么,为什么此示例输出i = 42
而不是i = 5
?
等号=
可能使您感到困惑。
static int i = 5;
的等号static int i = 5;
表示复制初始化 ,而不是赋值:
命名变量的复制初始化中的等号=与分配操作符无关。
从而,
但是,在func()的开头将int重新分配为5的值。
错了 永远不会在func
的开始分配它,无论是第一次还是以后的调用。 它仅由i = 42;
分配i = 42;
。
您也可以这样编写:
static int i(5);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.