如何使用initializer_list创建结构的C ++ <array>?

时间:2018-11-09 23:56:07

标签: c++ c++11 visual-c++

以下代码可按预期工作以初始化结构向量:

#include <array>
struct node
{
    std::string name;
    std::string value;
};

const std::vector<node> reqFields ({
    { "query", tmpEmail },
    { "firstname", firstName },
    { "lastname", lastName }
});

鉴于我的数据是静态的,我想稍微优化一下代码以使用C ++ 11数组。但是,以下内容将无法编译:

const std::array<node, 3>({
    { "query", tmpEmail },
    { "firstname", firstName },
    { "lastname", lastName }
});

初始化数组的正确语法是什么?还是这是Visual Studio 15遇到的问题?

1 个答案:

答案 0 :(得分:2)

std::vector的构造函数采用initializer_list

vector( std::initializer_list<T> init,
    const Allocator& alloc = Allocator() ); 

但是std::array是一个聚合,并且遵循aggregate initialization的规则。

所以您需要从()切换到{}

const std::array<node, 3> reqFields {
    {{ "query", "tmp" },
    { "firstname", "firstName" },
    { "lastname", "lastName" }}
};

see it live on godbolt