【发布时间】:2023-03-06 08:08:01
【问题描述】:
http://en.cppreference.com/w/cpp/language/storage_duration
静态局部变量
在块范围内声明的静态变量首先被初始化 时间控制通过他们的声明(除非他们的 初始化是零初始化或常量初始化,可以是 在第一次进入块之前执行)。在所有进一步的电话中, 声明被跳过。
这句话中的“静态”是什么意思?是吗:
静态存储持续时间。对象的存储空间是在什么时候分配的 程序开始并在程序结束时释放。
如果是这样,那么它不会解释 int k; 在 main 或任何其他函数中在初始化方面会发生什么,因为 k 不是静态变量(当程序开始并在程序结束时释放 - 稍等一下,您可能会说main 函数在程序开始时开始运行并在程序结束时返回,但我猜它不是这样工作的。
在主函数中:
int k;
k++;
导致错误:uninitialized local variable 'k' used。
那么如果上面的k不是一个静态局部变量,你能举一个这样的变量的例子吗?
谁能告诉我为什么即使k 没有初始化,下面的代码编译和运行也没有问题?
给定一个没有主体的函数:
void foo(int* number) { }
在main 中这样称呼它:
int k;
foo(&k);
k++;
现在编译和运行没有问题,但是k 的值是-858993459。编译器不喜欢我试图在没有启动的情况下递增它的事实,但是将它传递给foo 导致编译器忘记了它。为什么?
【问题讨论】:
-
反对者,请解释原因?
-
一个程序在
main被调用之前开始,在main返回之后结束。局部变量有自动存储时长,除非你用static指定静态时长,比如static int k;
标签: c++ initializer