代码之家  ›  专栏  ›  技术社区  ›  Andrew Tomazos

使用默认成员初始值设定项对std::数组的元素进行零初始化

  •  11
  • Andrew Tomazos  · 技术社区  · 6 年前

    假设我有这样的类模板:

    template<typename T, size_t N>
    struct S {
       std::array<T,N> a;
    };
    

    是否有可以放置的默认成员初始值设定项 a ,

    template<typename T, size_t N>
    struct S {
       std::array<T,N> a = ???;
    };
    

    这样无论怎样 T 是,元素 将始终初始化(从不具有不确定的值)?即,即使 T 是一个原始类型 int .

    2 回复  |  直到 6 年前
        1
  •  18
  •   Barry    6 年前

    这是:

    template<typename T, size_t N>
    struct S {
       std::array<T,N> a = {};
    };
    

    它将递归地 copy-initialize each element from {} . 为了 int ,初始化为零。当然,有人总是可以写:

    struct A {
        A() {}
        int i;
    };
    

    这会阻止 i 从初始化开始。但那是在他们身上。

        2
  •  6
  •   Jans    6 年前

    std::array 是聚合类型。可以用空大括号聚合初始化它 {} 这将相应地初始化 T 那个 STD::阵列 持有。