静态变量初始化?

Sachin Chourasiya:

我想知道为什么默认情况下C,C ++和Java中的确切静态变量初始化为零?为什么对局部变量不是这样?

PawełHajdan:

为什么要对静态变量进行确定性初始化而对局部变量不进行初始化?

了解如何实现静态变量。它们的内存在链接时分配,并且它们的初始值也在链接时提供。没有运行时开销。

另一方面,用于局部变量的内存是在运行时分配的。堆栈必须增长。你不知道以前在那里。如果需要,可以清除该内存(将其清零),但这会导致运行时开销。C ++的理念是“您不为不使用的东西付费”,因此默认情况下它不会将内存归零。

好的,但是为什么将静态变量初始化为零,而不是其他一些值?

好吧,您通常希望对该变量执行某些操作。但是,您如何知道它是否已初始化?您可以创建一个静态布尔变量。但是随后还必须将其可靠地初始化为某种值(最好是false)。指针呢?您希望将其初始化为NULL,而不是一些随机垃圾。结构/记录如何?它内部还有其他一些数据成员。将它们全部初始化为其默认值是有意义的。但是为简单起见,如果使用“初始化为0”策略,则不必检查单个成员并检查其类型。您可以将整个存储区初始化为0。

这实际上不是技术要求。如果默认值不是0,则初始化的语义仍可以认为是明智的,但仍是确定性的。但是,那该值是多少?您可以很容易地解释为什么使用0(尽管实际上听起来有些武断),但是解释-1或1024似乎更难(尤其是变量可能不足以容纳该值,等等)。

而且,您始终可以显式初始化变量。

而且,您始终拥有C ++标准的8.5.6段,其中指出:“静态存储持续时间的每个对象都应在程序启动时初始化为零”。

有关更多信息,请参考以下其他问题:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章