Я не понимаю, почему компилируется следующий код?{} vs.() инициализация члена класса
struct A{ A(int); }; struct B{ A a{1}; };
, но это не делает:
struct A{ A(int); }; struct B{ A a(1); };
ошибка: ожидается '' или '...' перед числовая константа
Есть ли какой-то причине компилятор не принимает вторая форма? Я знаю о наиболее неприятных parse ambiguiy, но я делаю не думаю, что этот вопрос связан.
EDIT: Как объясняет Боу в комментариях ниже, я был неправ. Вопрос - это, связанный с досадным разбором.
Я попробовал это на GCC-5.1.0 с --std = C++ 11
Я думаю, что ** ** связано и позволяет использовать A A {int()}; ', но конкретно не' A a (int()); '. –
@Bo: Последний объявляет функцию ** ** **, не так ли? –
@Ben - Да, поэтому он не используется для инициализации. :-) А также запрещает 'A a (1);' потому что он приглашает досадный синтаксический анализ. –