+ -
当前位置:首页 → 问答吧 → C++中局部变量不初始化,编译器如此设置原因何在?

C++中局部变量不初始化,编译器如此设置原因何在?

时间:2011-12-15

来源:互联网

C++中局部变量不自动初始化,
但全局变量会初始化为某个值,比如int 类全局变量自动设置为0。
编译器如此设置原因何在?

作者: hztj2005   发布时间: 2011-12-15

编译器对不同的内存区处理方式不同吧
局部变量存放在栈中,全局变量存放在全局/静态存储区,栈中的变量不会初始化,而全局/静态存储区的变量会做初始化,局部变量设为静态也是会初始化的。

作者: jixiang1983   发布时间: 2011-12-16

那你局部变量定义时,直接初始化。。这样就省事了!!

楼上说的很简单。。

作者: shen_wei   发布时间: 2011-12-16

“已初始化的全局变量保存在.data 段中,未初始化的或初始化为0全局变量保存在.bss 段中。” 

作者: wtbike   发布时间: 2011-12-16

引用楼主 hztj2005 的回复:
C++中局部变量不自动初始化,
但全局变量会初始化为某个值,比如int 类全局变量自动设置为0。
编译器如此设置原因何在?

如果说是原因我觉的应当是这样,早期C Compiler中把未初始化的全局变量保存在.bss段中,因为C中没有所谓的类概念,所以全局变量初始化不初始化都可以,初始化的行为转交由用户来负责,但是C++语言中存在类(非标量数据类型),我们知道类的构造函数在类实例化的时候一定要调用执行,因此如果全局变量是类实例变量的话,那么就不能不初始化了,就一定在CStartup Code之前收集所有的全局变量,然后调用它们的构造函数(其实收集这个过程是比较麻烦的),所以为了简单和一致,像int,char等等这些build in类型的全局变量也进行初始化,因此在很多Win平台下的C++编译器中都已经丢弃.bss段,应该说.bss段已经没有什么意义了.

总之一句话:合理,方便.
以上是个人观点,仅供参考.

作者: yuucyf   发布时间: 2011-12-16

热门下载

更多