c++ - 将聚合初始化为类成员

标签 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 的正确方法是什么?

最佳答案

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

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

关于c++ - 将聚合初始化为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404667/

相关文章:

c++ - 条件编译和非类型模板参数

c++ - 被 Unicode、Boost、C++、codecvts 难倒

c++ - 如何检查验证

c++ - 显式构造函数和嵌套初始化列表

c++ - 如何初始化 std::array<std::array<T, 2>, 2> 的对象?

c++ - 使用 braced-init 初始化 std::shared_ptr<std::map<>>

c++ - 根据不同条件初始化类模板的成员

c++ - Poco 记录器不会在进程重启时将日志附加到现有日志文件

java - 好的开源软件来分析

c++ - 从 braced-init-list 初始化私有(private)聚合