为什么C++编译器不会将每个整数声明初始化为0,无论是本地还是全局还是成员?

san*_*sht 1 c++ compiler-construction

令我感到困惑的是,为什么C++编译器不会将每个整数声明初始化为0,无论是本地还是全局或成员?为什么内存模型中存在未初始化的部分?

rub*_*nvb 17

我知道这是一个沉闷的答案,但你的问题完全归咎于它:

因为C++标准是这样说的.

为什么这么说呢?因为C++建立在一个原则上:

不要为你不使用的东西买单.

将内存设置为某个值会占用CPU时间和内存带宽.如果您想这样做,请明确地执行此操作.变量声明不应产生此费用.


Phi*_*ipp 7

C++基于C,而在C中,主要的设计问题是代码效率.在大多数情况下,您希望在声明新变量后将其初始化为特定值.当编译器将0写入该内存地址时,不久之后就会向其写入另一个值,这将浪费CPU周期.

当然,智能编译器可以在获得分配值之前检测到变量未被读取,并且可以将初始化优化为0.但是当C开发出来时,编译器还不是那么聪明.

C语言及其标准库通常遵循以下原则:当在某些情况下可能不需要时,它不会自动执行操作.