7
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++ 编译甚至不允许它(w/C++0x,我假设缺少初始化列表),说“预期的表达式”,这基本上意味着“这到底是什么?”,甚至当我使用构造函数(上面注释掉),它会抛出错误。

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

4

1 回答 1

5

通过使用新的统一初始化语法,上述代码仅在 C++0x 中是合法的。C++03 会拒绝这个。在此期间,为您定义一个构造函数struct是要走的路。

于 2011-08-10T08:03:27.733 回答