栈分配数组会自动零初始化吗?如何实现栈分配零初始化数组?
栈分配数组的零初始化问题
原问题中的栈数组是否自动零初始化?
不会。代码int myArray[5];声明的栈数组属于默认初始化,对于int这类内置基本类型,默认初始化不会为元素分配初始值,数组内的元素会是内存中的随机垃圾值。
如何声明栈分配的零初始化数组?
有几种可靠的方式:
- 使用空初始化列表(C++03及以上版本均支持):
这种写法会将数组的所有元素零初始化。int myArray[5] = {}; - C++11及以后版本可省略等号,简化为:
int myArray[5]{}; - 若需兼容更老的C风格写法,也可使用
memset(仅适用于POD类型,如int):
注意:int myArray[5]; memset(myArray, 0, sizeof(myArray));memset是按字节填充零,对于非POD类型(如包含自定义构造函数的类)可能引发未定义行为,因此优先推荐前两种初始化列表的方式。
关于堆分配数组的零初始化
你提到的int* myArray = new int[5]();是正确的堆数组零初始化方式,此处的()会触发值初始化,将所有int元素置零。
内容的提问来源于stack exchange,提问作者Karlos
相关产品推荐
相关产品推荐

