san*_*sht 1 c++ compiler-construction
令我感到困惑的是,为什么C++编译器不会将每个整数声明初始化为0,无论是本地还是全局或成员?为什么内存模型中存在未初始化的部分?
rub*_*nvb 17
我知道这是一个沉闷的答案,但你的问题完全归咎于它:
因为C++标准是这样说的.
为什么这么说呢?因为C++建立在一个原则上:
不要为你不使用的东西买单.
将内存设置为某个值会占用CPU时间和内存带宽.如果您想这样做,请明确地执行此操作.变量声明不应产生此费用.
C++基于C,而在C中,主要的设计问题是代码效率.在大多数情况下,您希望在声明新变量后将其初始化为特定值.当编译器将0写入该内存地址时,不久之后就会向其写入另一个值,这将浪费CPU周期.
当然,智能编译器可以在获得分配值之前检测到变量未被读取,并且可以将初始化优化为0.但是当C开发出来时,编译器还不是那么聪明.
C语言及其标准库通常遵循以下原则:当在某些情况下可能不需要时,它不会自动执行操作.