Инициализаторы в классе (Функция C ++ 11) должна быть заключена в фигурные скобки или следовать за знаком =. Они не могут быть указаны в скобках.
Что является причиной этого?
Я не уверен на 100% об этом, но это может предотвратить неоднозначность синтаксиса. Например, рассмотрим следующий класс:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing(Overloaded); // <-- This line
};
Что означает указанная строка? Как написано, это объявление функции-члена с именем confusing
который принимает в качестве параметра объект типа Overloaded
(чье имя не указано в объявлении функции) и возвращает int
, Если бы C ++ 11 позволял инициализаторам использовать круглые скобки, это было бы неоднозначно, потому что это также могло бы быть определением члена типа int
названный confusing
который инициализируется значением элемента данных Overloaded
, (Это связано с текущей проблемой с Most Vexing Parse.)
Требуя фигурные скобки, эта двусмысленность устраняется:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing{Overloaded}; // <-- This line
};
Теперь ясно, что confusing
на самом деле int
инициализируется до значения Overloaded
потому что нет способа прочитать его как объявление функции.
Надеюсь это поможет!
Других решений пока нет …