我正在尝试用0初始化一个对象数组(像这样(一个更复杂的项目的简化代码)):
update
此代码应打印全0,但有时会打印不同的值。看起来只有数组的第一个元素被初始化了。但是,如果我写float x [4] = {0},则数组x的所有元素都将初始化为0。有什么区别?在C ++标准中我可以从哪里了解到这种行为?
答案 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]的访问为未定义行为。