未初始化为0的对象数组

时间:2019-06-23 17:04:34

标签: c++ language-lawyer

我正在尝试用0初始化一个对象数组(像这样(一个更复杂的项目的简化代码)):

update

此代码应打印全0,但有时会打印不同的值。看起来只有数组的第一个元素被初始化了。但是,如果我写float x [4] = {0},则数组x的所有元素都将初始化为0。有什么区别?在C ++标准中我可以从哪里了解到这种行为?

1 个答案:

答案 0 :(得分:6)

我想您可能想看看这里:https://en.cppreference.com/w/cpp/language/aggregate_initialization

使用

Vector v[4] = { Vector::zero() };

您初始化第一个元素,其余三个通过对未初始化数组的默认ctor的调用进行初始化(默认ctor的主体为空)。

在数组声明的开头用

代替
float s[4]{};

这将对数组进行值初始化,将其清零。然后,您可以删除其他所有内容。

要了解值初始化和零初始化之间的关系,请参阅https://en.cppreference.com/w/cpp/language/value_initialization

此外,正如用户Kenny Ostrom在评论中指出的那样,您可能要考虑使用std::array,但要记住您仍需要对其进行值初始化,请参见Default initialization of std::array?。 最后,如注释中所述,对x [4]的访问为未定义行为。