English 中文(简体)
法定变量初始化?
原标题:Static variable initialization?
  • 时间:2009-12-02 07:53:56
  •  标签:
  • java
  • c++
  • c

我想知道,为什么C、C++和Java的固定变量在违约时以零开始出现? 当地变量为何不如此?

最佳回答

静态变量是决定性的初始变量,当地变量为t?

见固定变量是如何实施的。 对他们的记忆在链接时间分配,其初步价值也在链接时间提供。 没有管理费。

而另一方面,地方变量的记忆则在时间分配。 st势必须增加。 你们不知道以前的情况。 如果你想要的话,你可以清楚地看到,记忆(零),但会带来管理费。 C++哲学是“你不支付你不使用的东西”,因此,以违约方式记忆为零。

OK,但为什么静态变量被初步定为零,而不是其他一些数值?

诚然,你一般希望与这一变量做一些事情。 那么,你们知道这是否已经启动? 你们可以产生静态的 b变。 但是,它也必须可靠地成为某种东西(最好是假的)。 How about a pointer? 你们想要的是,它比某些任意的垃圾开始。 如何构造/记录? 它内部还有其他一些数据成员。 将它们全部用于其违约价值是有意义的。 但是,为了简单起见,如果你使用“初始到0”战略,你就不必检查个别成员并检查其类型。 You can Just initialize the all memory area to 0:

这实际上不是一个技术要求。 如果违约价值不是0,但仍然是决定性的,则初始化的语义仍可视为衰弱。 但是,这种价值应当是什么? 你可以非常容易地解释为何使用0(尽管这确实稍为武断),但解释-1或1024似乎更为困难(特别是变数可能不足以保持这一价值等)。

你们总是能够明确开始变数。

而总是,C++标准第8.5.6段说,“每个固定储存期的物体,在方案启动时,均应零开始”。

详情请参见这些其他问题:

问题回答

C++标准第8.5.6段规定:

“静态储存期的每一物体在方案启动时均应零开始”

(标准还称,当地变量的初始化没有界定)

为什么标准没有说; 一种猜测是,在没有额外下滑的情况下,执行起来会比较容易。

j:

当地变量必须先入门,然后才能进入,因为它带来安全利益。 如果能够确定变量,则由汇编者对你进行检查。

静态变量或类别变量(目标类型)以<代码>null 初步化,因为汇编者如果在汇编时间进行初步化,可进行核对。 如果方案能够查阅非初始变数,则不会让方案失败,而是将采用<代码>null的含蓄格式。

具有本地类型变量的变量可获取null值,因此,非本地变量以0<>/code>或false作为反馈。 这不是最好的解决办法,但我不知道更好的解决办法。

因此,在某种程度上,这些只是语文设计人的设计决定。 但 Java作出这些决定的可能原因如下:

  • for static/member variables, if you re going to initialise them to something, then zero is a convenient value because (a) it s generally a suitable value to mean "not set to anything else special", and is the value you would have picked anyway in some cases such as counters; and (b) internally, it s likely that zero can be used for "special" values, notably to represent null in the case of an object reference.
  • for local variables, giving them no default allows for the rule that forces the programmer to set some value before the variable is read, which can actually be useful in allowing the compiler to spot certain errors.

就当地变量而言,还可以想象的是,可以宣布一个地方变量(在星码/机械法一级,主要是指分配中位空间/移动中位点),但从实际来看,在某种代码道路上从未写过。 因此,没有违约就避免了在这些情况下作出设定违约的不必要工作。

不过,我重复说,这些是在某种程度上设计决定。 它们基本上在可能方便联合执行认证程序的执行与方案制定者的方便性之间进行了权衡。

N.B. 在C/C++中,“静态”变量意味着 Java的静态变量不同!

这只是一种猜测,但可能是一种静态的方法,因为它易于执行,而且有用。

汇编者可将所有变数共同分配给一个冷却区,然后要么在<代码>main(<>>上加以澄清。 在许多情况下,如果该格式支持“bssection“,则该格式也可依赖可执行的文档格式。 这节省了可执行空间,你本可以这样做。

static unsigned char megabyte[1 << 20];

而执行者不会因为特大而增长。

对于当地变量而言,这些变量都不适用;这些变量是“飞行”分配的(通常在分数上),而清除这些变量的资源将浪费,因为它们通常会很快被分配。

我对java没有任何想法,我怀疑它对于 j的静态/地方有不同。

至于C和C++,它涉及那些关心其编码效果和爱心控制的方案人员。 引入当地变量将意味着在每个方案进入范围时执行额外的代码。 经常被称为灾害的职能。

这与C/C++中的“只付你使用的款项”概念有关。

对于静态变量,可以在没有生成代码的情况下进行初始化。 标书载有数据部分变量的初步数值,以及当本组织装上可执行部分时,在方案开始执行之前,将这一数据部分绘制成地图。

对于当地变量来说,没有编码就没有初步确定这些变量,因为这些变量不是一开始,就应当每当你进入其范围时就予以初步确定;当分配时,一般情况下的分数的最初价值只是以前的情况(除了这些少见的时刻,你比以前增加的分数点)。

因此,为了暗含地初步形成一个地方变量,汇编者将需要在没有方案人明确指示其这样做的情况下制定守则,这完全违背了“哲学”。

就我所知,大约 Java,在方案进入范围时,各种变量总是先入选,无论它们是静止的还是非固定的。 两者的唯一重大差别是固定变量的范围是整个方案。 鉴于此,所有这些行为都是一致的。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...