英文:
Does a stack allocated array gets automatically zero-initialized?
问题
这个数组会自动进行零初始化吗?如果不会,如何声明一个堆栈分配的零初始化数组?
我知道对于堆分配的数组,我可以这样做:
int* myArray = new int[5]();
不管怎样,谢谢
英文:
If I do something like this:
int myArray[5];
Is that array automatically zero-initialized? If not, how can I declare a stack allocated, zero-initialized array?
I know that for heap allocated arrays, I can do:
int* myArray = new int[5]();
Thanks anyway
答案1
得分: 6
不,数组的初始值是未初始化的值(即未定义)。它们不会在C++中初始化为零。
要显式将数组初始化为零,您可以使用以下语法:
int myarray[5]{}; // 是的,最好使用 int myarray[5]();
// 就像您在动态分配中所做的那样。
// 但当然最棘手的解析出现了
// 所以我们添加了 `{}` 作为 `()` 的替代
// 以解决这个小问题。
// 当然还有几种替代方案
// 源自最初的语法。
int myarray[5]={0}; // 摘自:C(paraphrasing)
// 如果数组初始化器中的值列表不足以填充数组
// 则用0扩展以确保列表与数组的长度匹配。
这是在C++中将数组元素初始化为零的标准方法。
希望这回答了您的问题。
英文:
No, the initial values of the array are uninitialized values (ie undefined). They don't get initialized to zero in c++;
To explicitly initialized the array to zero, you can use the following syntax:
int myarray[5]{}; // Yes it would be nice to use int myarray[5]();
// Like you did with dynamic allocation.
// But of course the most vexing parse kicks in
// So we added '{}` as an alternative to `()`
// to get around this small issues.
// Of course there are a couple of alternatives
// From the original syntax.
int myarray[5]={0}; // From: C (paraphrasing)
// If the list of values in an array
// initializer is not long enough for the
// array it is expanded with 0 to
// make sure the list matches the length
// of the array.
This is the standard way to initialize the array element to zero in c++;
Hope this answers your question.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论