代码部分:
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调试控制台的输出:
答案 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帖子中找到相关信息。
答案 1 :(得分:0)
Visual Studio 2013 Update 2刚刚解决了这个错误。