我一直在重构一些代码,我注意到一些涉及未初始化的 int 数组的奇怪行为:
int arr[ARRAY_SIZE];
我设置了一个断点,似乎所有值都默认为 -858993460。这个值有什么特别之处吗?知道为什么它们不默认为 0 吗?
最佳答案
在 C++ 中没有“默认值”——变量和数组元素,在被您的代码初始化之前,将包含内存中最后的任何内容。
换句话说,当这些变量被声明时,内存中就预留了一 block 空间供它们使用。上次使用内存时留下的内存位仍然存在,导致您的变量最初看起来好像充满了“垃圾”。内存并不总是立即清零的原因是速度——将内存清零需要时间。
您可以使用循环初始化数组,或使用此技巧(存在可读性大大降低的风险):
int mouseBufferX[mosueBufferSize] = { 0 };
这是可行的,因为当您使用值列表来初始化数组时,文字值少于数组中元素的数量,其余元素总是被初始化为 0。
关于c++ - 无法解释的 C++ 默认 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6247017/