堆栈分配的数组是否会自动进行零初始化?

huangapple go评论82阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2023年5月29日 02:27:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/76353003.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定