C++ 安全初始化布尔值的std::数组

C++ 安全初始化布尔值的std::数组,c++,stdarray,zero-initialization,default-initialization,C++,Stdarray,Zero Initialization,Default Initialization,给定此数组声明和初始化: std::array<bool, 20> invalid_params{}; std::数组无效的_参数{}; 我可以假定数组中的所有元素都将初始化为false,还是显式地初始化更好?保证用false值填充 std::array是一个聚合,因此它没有用户定义的构造函数,因此执行 但是如果删除{}(将其转换为默认初始化),元素将被取消初始化。文档中说:“默认初始化可能会导致非类T的值不确定”。因此,您似乎不能假设它将被初始化。默认初始化将是std::ar

给定此数组声明和初始化:

std::array<bool, 20> invalid_params{};
std::数组无效的_参数{};

我可以假定数组中的所有元素都将初始化为false,还是显式地初始化更好?

保证用
false
值填充

std::array
是一个聚合,因此它没有用户定义的构造函数,因此执行



但是如果删除
{}
(将其转换为默认初始化),元素将被取消初始化。

文档中说:“默认初始化可能会导致非类T的值不确定”。因此,您似乎不能假设它将被初始化。

默认初始化将是
std::array invalid_params。使用
{}
进行值初始化。@HolyBlackCat公平地说,OP在他们的问题中没有说明仅使用此语法(事实上是这样)假设元素为false是否安全。@eerorika我的问题语法确实引起了一些混乱,我已经说得更清楚了(我希望如此)。如果您使用
{/code>语法,它总是初始化为
false
。如果不使用它,它将保持未初始化状态。@AyxanHaqverdili,是的,未初始化的部分非常清楚,我担心的是,鉴于bool的怪癖,值初始化可能允许初始化为true,但似乎不是这样。对于内置类型,对于所有元素,值初始化总是类似于
=0
。(变为
0
false
nullptr
等)如果在全局范围内定义,则即使没有显式初始值设定项,其元素也将被零初始化。