C ++类名后的花括号是什么意思?

时间:2016-01-02 03:01:00

标签: c++ vector struct

我没有使用C ++的经验,所以这可能是一个愚蠢的问题,但我已经尝试用谷歌搜索(这很难,我不确定google如何在其搜索中处理parens braces等)甚至尝试了一些矢量和结构教程,但我无法弄清楚。

我遇到了一行代码,我在下载的来源中无法理解,这行是什么意思?

std::vector<node> nodes = std::vector<node>{{node{}}};

node是一个结构,定义为:

struct node {
    enum class type : uint16_t {
        none = 0,
        integer = 1,
        real = 2,
        string = 3,
        vector = 4,
        bitmap = 5,
        audio = 6,
        uol = 7
    };
    uint32_t name = 0;
    uint32_t children = 0;
    uint16_t num = 0;
    type data_type = type::none;
    union _data {
        int64_t integer = 0;
        double real;
        uint32_t string;
        int32_t vector[2];
        struct _bitmap {
            uint32_t id;
            uint16_t width;
            uint16_t height;
        } bitmap;
        struct _audio {
            uint32_t id;
            uint32_t length;
        } audio;
    } data;
};

它给了我一个编译错误,抱怨说nodeuint32_t没有可行的转换。

我不理解的那一行的唯一部分是最后的嵌套花括号,所以我假设它是问题所在。但它在做什么呢?

我想如果它只有一个参数,并且它在列表中传递带有node{}的列表,例如,

,你可能不需要括号来调用构造函数。
std::vector<node> nodes = std::vector<node>({{node{}}});

但是为什么要尝试将其转换为uint32_t?我很困惑。如果有人能够对此有所了解,我将非常感激。

0 个答案:

没有答案