Синтаксис в назначении на карту структур - PullRequest
7 голосов
/ 10 августа 2011
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)?

1 Ответ

5 голосов
/ 10 августа 2011

Приведенный выше код допустим только в C ++ 0x с использованием нового единого синтаксиса инициализацииC ++ 03 отклонит это.Тем временем, определение конструктора для вашего struct - путь.

...