将聚合初始化为类成员

时间:2015-12-21 21:32:04

标签: c++ list-initialization

在此代码中:

#include <array>
#include <cstdint>

struct K {
    std::array<char, 4> a;
    std::uint8_t b;
};

const K k1 = { {'T', 'e', 's', 't'}, 1 };

class X {
    const K k2 = { {'A', 'b', 'c', 'd'}, 2 };
};

我可以初始化一个全局对象k1。但是尝试在类成员k2的默认初始值设定项上使用相同的语法会产生编译器错误(g ++ - 4.8.2和g ++ - 5.2.0中的类似错误):

main.cpp:12:44: error: array must be initialized with a brace-enclosed initializer
     const K k2 = { {'A', 'b', 'c', 'd'}, 2 };
                                            ^
main.cpp:12:44: error: too many initializers for 'std::array<char, 4ul>'

在声明中初始化k2的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

你只需要一对额外的大括号:

class X {
    const K k2 = { {{'A', 'b', 'c', 'd'}}, 2 };
};