带struct的静态const map初始化列表?

时间:2014-04-03 15:59:05

标签: c++11 visual-studio-2013 initializer-list

代码部分:

struct id_s {
    std::string name1;
    std::string name2;
};

static const std::map<uint8_t, id_s> list = {
    { 0x00, { "Fred", "Apple" } },
    { 0x01, { "John", "Banana" } },
    { 0x02, { "Mark", "Mango" } }
};

int main()
{
    for(const auto& it: list) {
        std::cout<<it.first<<"\t"<<it.second.name1<<"\t"<<it.second.name2<<std::endl;
    }
     return 0;
}

问题是初始化后所有字段都被正确分配,“John”和“Mark”除外,它们保留为“”。

如何使用C ++ 11初始化列表正确分配它?

VS 2013调试控制台的输出:

http://oi57.tinypic.com/2nqduea.jpg

2 个答案:

答案 0 :(得分:0)

这是初始化的正确方法。我已运行程序并使用以下代码在控制台上打印

for(const auto& it: lst) {
 std::cout<<it.first<<"\t"<<it.second.name1<<"\t"<<it.second.name2<<std::endl;
}
  

输出

       Fred    Apple
0x1 John    Banana
0x2 Mark    Mango

我运行了这个程序Linux机器。我正在使用完全符合c ++ 11标准的gcc4.8.1。我没有使用过VS2013,但是如果你使用它并且没有得到正确的初始化值,可能会出现问题/错误VS2013,因为它可能没有完整实现初始化列表。

顺便说一下,您不应该使用标准中定义的变量名称(列表)。这不是一个好习惯。

修改

它看起来像VS2013中的已知错误,您可以从以下SO帖子中找到相关信息。

https://stackoverflow.com/a/19646517/2724703

答案 1 :(得分:0)

Visual Studio 2013 Update 2刚刚解决了这个错误。