C++中局部变量不初始化,编译器如此设置原因何在?
时间:2011-12-15
来源:互联网
C++中局部变量不自动初始化,
但全局变量会初始化为某个值,比如int 类全局变量自动设置为0。
编译器如此设置原因何在?
但全局变量会初始化为某个值,比如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++中局部变量不自动初始化,
但全局变量会初始化为某个值,比如int 类全局变量自动设置为0。
编译器如此设置原因何在?
如果说是原因我觉的应当是这样,早期C Compiler中把未初始化的全局变量保存在.bss段中,因为C中没有所谓的类概念,所以全局变量初始化不初始化都可以,初始化的行为转交由用户来负责,但是C++语言中存在类(非标量数据类型),我们知道类的构造函数在类实例化的时候一定要调用执行,因此如果全局变量是类实例变量的话,那么就不能不初始化了,就一定在CStartup Code之前收集所有的全局变量,然后调用它们的构造函数(其实收集这个过程是比较麻烦的),所以为了简单和一致,像int,char等等这些build in类型的全局变量也进行初始化,因此在很多Win平台下的C++编译器中都已经丢弃.bss段,应该说.bss段已经没有什么意义了.
总之一句话:合理,方便.
以上是个人观点,仅供参考.
作者: yuucyf 发布时间: 2011-12-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28