C++ 将聚合初始化为类成员

C++ 将聚合初始化为类成员,c++,list-initialization,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 }; }; 在声明时初始化k2的正确方法是什么?您只需要一

在此代码中:

#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 };
};

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

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

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

您使用的编译器是什么?Clang接受它时警告
main.cpp:9:17:警告:建议围绕子对象初始化使用大括号[-Wmissing brates]
(对于
std::array
initialization)。我发现统一初始化并不是这样的事情很有趣。@lightness racesinorbit更有趣,等等,C++17:)这是一个标准要求,还是g++安装了错误而不接受原始要求?@M.M我认为这是C++14之前的一个要求。我不知道GCC在这件事上是否合规。
class X {
    const K k2 = { {{'A', 'b', 'c', 'd'}}, 2 };
};