【问题标题】:std::array guarantee zero-initialization? [duplicate]std::array 保证零初始化? [复制]
【发布时间】:2021-12-09 14:55:07
【问题描述】:

我想知道 std::array 将所有字段初始化为零

struct Foo {
  int a;
  int b;
  std::uint32_t c : 16;
  std::uint32_t d : 16;
};

class Bar {
 public:
  std::array<Foo, 2> foo;
}

foo 的所有字段都初始化为零?

【问题讨论】:

    标签: c++


    【解决方案1】:

    std::array 是一个聚合类。当您默认初始化聚合时,聚合的成员也默认初始化。默认初始化整数不会将其初始化为零。如果您对聚合进行值初始化,那么聚合的成员也会进行值初始化。整数的值初始化是零初始化。

    简而言之:没有。

    【讨论】:

      【解决方案2】:

      没有。你应该这样做:

      class Bar {
       public:
        std::array<Foo, 2> foo = {};
      }
      

      或者

      class Bar {
       public:
        std::array<Foo, 2> foo = std::array<Foo, 2>();
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-26
        • 1970-01-01
        • 2018-01-13
        • 2015-10-05
        • 2012-02-10
        • 1970-01-01
        • 2020-10-20
        • 2021-09-11
        • 2011-03-19
        相关资源
        最近更新 更多