给结构体映射赋值的语法


struct Structure {
//  Structure(const char* n, int v, bool a) : name(n), value(v), awesome(a) {}
  const char* name;
  int value;
  bool awesome;
};
std::map<const char*, Structure> map;
map["alpha"] = {"Alpha", 0, true};
map["beta"]  = {"Beta",  1, false};
map["gamma"] = {"Gamma", 2, true};

g++(4.6)在c++ 03中接受这种赋值语法,但抱怨"扩展初始化式语法只在c++ 0x中可用"(转述)。我知道我可以创建一个按顺序接受值的构造函数,但我想知道这种语法是否可以接受(w/o c++ 0x),还是c++只是为了安抚我,因为我对c++ 0x太焦虑了。

用clang++编译甚至不允许它(w/c++ 0x,我假设缺乏初始化器列表),说'预期表达式',这基本上意味着"这是什么鬼?",甚至当我使用构造函数(上面注释掉了)时,它也会抛出错误。

总结:所以基本上,什么是正确的语法使用,我可以使用初始化列表格式(在c++ 03或c++ 0x)?

以上代码只有在c++ 0x中使用新的统一初始化语法才合法。c++ 03将拒绝此操作。在此期间,为您的struct定义构造函数是可行的方法。

最新更新