分配给结构图的语法

时间:2011-08-10 08:00:58

标签: c++ map struct c++11 initializer-list

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中使用'(释义)。我知道我可以创建一个按顺序接受值的构造函数,但我想知道这个语法是否可以接受(没有C ++ 0x),或者G ++只是让我感到安慰,因为我对C +非常着急+ 0X。

使用clang ++进行编译甚至不允许它(带有C ++ 0x,我假设缺少初始化列表),说'期望表达',这基本上意味着“这到底是什么?”,甚至当我使用构造函数(上面注释掉)时,它会抛出错误。

摘要:基本上,使用的语法是什么,我可以使用初始化列表格式(在C ++ 03或C ++ 0x中)吗?

1 个答案:

答案 0 :(得分:5)

通过使用新的统一初始化语法,上述代码仅在C ++ 0x中合法。 C ++ 03将拒绝这一点。在此期间,为struct定义构造函数是可行的方法。