为什么默认情况下数据实例不为NULL?

时间:2011-04-09 11:48:40

标签: c++ compiler-construction null initialization default

一直困扰我的是为什么编译器没有将数据设置为NULL,如果没有指定其他内容?我没有看到任何理由,而且肯定它必须比被引用的垃圾更好?

5 个答案:

答案 0 :(得分:3)

最初的原因是“为了速度” - 一旦你给他们分配某些东西,变量才有意义,所以努力不对{{1进行无意义的初始化无论如何,只需几毫秒的时间用实际的数据就会被程序员覆盖。

虽然它并不完全昂贵,但编译器今天可能不会因为同样的原因而将变量归零:任何编译器与基准测试中的其他编译器相比看起来会很慢。

答案 1 :(得分:3)

唯一的好理由是效率不高。 C和C ++(与高级语言不同)往往不会做任何你没有要求的事情。这就是他们如何获得极快的声誉。其他语言更安全,但速度更慢。

如果你想将字段初始化为NULL以外的任何东西,首先将它初始化为NULL并且然后将其初始化为你设置的任何内容都是浪费时间。所以C / C ++假设你知道你在做什么。

答案 2 :(得分:0)

我的猜测是因为速度原因。他们将是另一个CPU调用。

答案 3 :(得分:0)

如果您在堆上声明变量(免费存储,即全局且仅全局),则会将其初始化为0.

但是,堆栈上的数据并未作为加速此操作的方式进行分配。如果您要覆盖它,则无需将数据初始化为0,这是使用本地(堆栈)数据进行的假设。

答案 4 :(得分:0)

将分配的内存设置为零并将结构标记为“null”需要时间。您的应用程序可能具有时间要求严格的部分,其中对象必须尽快实例化,然后以尽可能简单的方式初始化它们以使它们可用。因此,编译器和运行时尽可能少地制作对象,并让您按照自己的意愿完成设置。

某些高级语言确实会进一步初始化为“null”,但这些语言并不总是适合时间要求严格的应用程序。