有这个疑问很久了,今天搜了一上午资料想知道为什么。我们都知道,C++ 11 ISO标准中,未初始化的全局变量会被置0,原文如下。
Variables with static storage duration (3.7.1) or thread storage duration (3.7.2) shall be zero-initialized (8.5)
before any other initialization takes place.
以上摘自C++11 ISO文档从以上这段话不难看出,确切说,全局变量是先被初始化为0,然后才进行其他的初始化。
好,既然标准如此,这么一个规定,到底是个死规定,还是有背后的技术原因?
查阅了很多文档。找到了一些信息,大体摘录一些。
Security: leaving memory alone would leak information from other processes or the kernel.
Efficiency: the values are useless until initialized to something, and it's more effic

C++11标准规定未初始化的全局变量会被自动置0。这一规定并非出于特定技术原因,而是标准的硬性要求。讨论中提及效率因素和C语言传统,但主要原因是确保程序行为的可预测性。若局部变量地址固定,或许也会有类似初始化。
最低0.47元/天 解锁文章
867

被折叠的 条评论
为什么被折叠?



