为什么c++编译器不将每个整数声明初始化为0,无论是局部的、全局的还是成员的
Why do C++ compilers not initialise every integer declaration to 0, be it local or global or a member?
让我困惑的是为什么c++编译器不将每个整数声明初始化为0,无论是局部的还是全局的还是成员的?为什么在内存模型中存在未初始化的部分?
我知道这是一个无聊的答案,但你的问题确实需要它:
因为c++标准是这么说的。
为什么这么说?因为c++是建立在以下原则之上的:
不要为你不用的东西买单。
设置内存值会消耗CPU时间和内存带宽。如果你想这么做,那就明确地做。变量声明不应该产生这个开销。
c++是基于C语言的,在C语言中,主要的设计关注点是代码效率。在大多数情况下,您希望在声明新变量后将其初始化为特定值。当编译器将0写入该内存地址只是为了稍后向其写入另一个值时,这将浪费CPU周期。
当然,智能编译器可以在变量赋值之前检测到它没有被读取,并且可以将初始化优化为0。但是当C语言被开发出来的时候,编译器还没有那么聪明。C语言及其标准库通常遵循这样的原则:在某些情况下,当不需要做某些事情时,它不会自动执行。
如果这样做可能会让你的生活更轻松,但是c++在避免开销方面的错误,例如设置可能会被重置为其他内容的值
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何创建一个空的全局类并在启动时实例化它
- 内联函数中具有内部链接的全局变量
- 为什么虚函数不能是静态的和全局的?
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局作用域中函数指针的赋值
- g++用户定义的动态链接库上的全局new和delete运算符
- 在命名空间中使用全局命名空间中的函数
- 全局变量 多读取器 一个写入器多线程安全?
- 类的全局对象和静态成员
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- 如何使用 llvm-10 库在C++定义 LLVM 全局值变量?
- 使用全局声明的向量时,C++双重释放错误/损坏
- 将线程中的数据存储到全局容器的最佳方法?
- 为什么c++编译器不将每个整数声明初始化为0,无论是局部的、全局的还是成员的