一定要初始化静态对象吗?

问题描述:

从编程语言语用,由Scott一定要初始化静态对象吗?

对象的寿命通常对应于三个主要 存储分配机制之一,用于管理对象的空间:

  1. 静态对象给出的绝对地址这在整个程序的执行过程中保留下来。

  2. 栈对象分配和释放在最后的,第一个出的顺序,通常与子程序调用和返回结合。

  3. 堆对象可以分配,并在任意时间释放。他们需要更通用(并且昂贵)的存储管理算法 算法。

例如,在C,静态对象必须用常量表达式(表达式可在编译时被评估)初始化。

我不知道它是否在其他语言的情况下,甚至什么其他语言也有静态的对象。

一般来说,必须初始化静态对象吗?初始化时,它们是否必须使用可在编译时评估的表达式进行初始化?

通过初始化,我的意思是显式或隐式的(即自动语言实现完成),而不是uninitailziation。 所以要重新说明我的问题:通常,程序或编译器可以将静态对象保持为未初始化状态?

谢谢。

+0

简短答案是'不'。但是他们可能应该在程序的后面避免未初始化的问题。 – Serge

+0

不完全正确,一个'static'变量默认被初始化为0(或者等价),'non static'变量应该被初始化,否则会在你的内存栈中产生一些垃圾值。 –

一个static变量将被初始化为“零”自动,除非你明确地初始化。

除此之外,生命时间或连接部分,它绝不逊于其它任何变量,这意味着您可以在初始化任何其他变量相同的方式将其初始化不同。

+0

谢谢。 通过初始化,我的意思是显式或隐式,而不是单纯化。 那么你是说静态对象必须被初始化? – Tim

+0

@Tim不,它们会在调用'main'之前由“编译器”自动初始化,除非你明确地做了。 –

+0

让我重新说明我的问题:通常,程序或编译器可以将静态对象保持为未初始化状态吗? – Tim