c++ - 无法解释的 C++ 默认 int 值

标签 c++ c visual-studio

我一直在重构一些代码,我注意到一些涉及未初始化的 int 数组的奇怪行为:

int arr[ARRAY_SIZE];

我设置了一个断点,似乎所有值都默认为 -858993460。这个值有什么特别之处吗?知道为什么它们不默认为 0 吗?

最佳答案

在 C++ 中没有“默认值”——变量和数组元素,在被您的代码初始化之前,将包含内存中最后的任何内容。

换句话说,当这些变量被声明时,内存中就预留了一 block 空间供它们使用。上次使用内存时留下的内存位仍然存在,导致您的变量最初看起来好像充满了“垃圾”。内存并不总是立即清零的原因是速度——将内存清零需要时间。

您可以使用循环初始化数组,或使用此技巧(存在可读性大大降低的风险):

int mouseBufferX[mosueBufferSize] = { 0 };

这是可行的,因为当您使用值列表来初始化数组时,文字值少于数组中元素的数量,其余元素总是被初始化为 0。

关于c++ - 无法解释的 C++ 默认 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247017/

相关文章:

xcode - GCC 4.2 编译器中未正确声明方法的错误检测不成功

c - C 中的段错误

c - char 和 string 具有相同的变量

c - 为什么我的代码中出现无限循环?

c++ - 无法中断执行。该进程当前未执行该类型代码

python - 如何访问当前文件夹目录之外的代码?

visual-studio - 如何单击 Visual Studio 摘要中的链接?

C++ 条件等待竞争条件

c++ - 有什么有效的方法可以对一组大于一百万的字符串进行重复数据删除?

c++ - 为什么没有链接的名称可以在其他作用域中访问?