【问题标题】:Safely initializing a std::array of bools安全地初始化一个 std::array of bools
【发布时间】:2021-08-11 09:05:42
【问题描述】:

鉴于此数组声明和初始化:

std::array<bool, 20> invalid_params{};

我可以假设数组中的所有元素都将总是初始化为 false,还是明确地这样做更好?

【问题讨论】:

  • 如果您使用{} 语法,它总是用false 初始化。如果你不使用它,它就会保持未初始化状态。
  • @AyxanHaqverdili,是的,未初始化的部分很清楚,我担心的是,鉴于 bool 的怪癖,值初始化可能允许初始化为真,但似乎情况并非如此。
  • 对于内置类型,所有元素的值初始化总是类似于=0。 (成为0falsenullptr等)

标签: c++ stdarray zero-initialization default-initialization


【解决方案1】:

保证用false 值填充。

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


但是如果你删除{}(把它变成默认初始化),元素将被取消初始化。

【讨论】:

  • 如果它是在全局范围内定义的,即使没有明确的初始化器,它的元素也会被零初始化。
【解决方案2】:

文档说:“默认初始化可能会导致非 T 类的不确定值”。所以,看来你不能假设它会被初始化。

【讨论】:

  • 默认初始化为std::array&lt;bool, 20&gt; invalid_params;{} 是值初始化。
  • @HolyBlackCat 公平地说,OP 没有在他们的问题中说明是否可以安全地假设仅使用这种语法(确实如此)的元素是错误的。
  • @eerorika 似乎我的问题语法引起了一些混乱,我已经说得更清楚了(我希望如此)。
猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 2012-02-10
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多