Рассмотрим следующий класс:
class Foo {
int a, b;
public:
Foo() : a{1}, b{2} {} // Default ctor with member initializer list
//Foo() : a{1}, b{2} = default; // Does not work but why?
};
( Редактировать : потому что это было упомянуто в нескольких ответах - мне известны инициализаторы членов класса,но здесь дело не в этом)
Я думаю, что второе определение ctor будет более элегантным и лучше вписывается в современный код C ++ (см. также , почему вы должны использовать =default
, если вам нужнобыть явным об использовании семантики по умолчанию ).Тем не менее, ни один общий компилятор, кажется, не принимает его.И cppreference об этом ничего не говорит.
Моей первой мыслью было то, что список инициализаторов элементов каким-то образом изменяет "семантику по умолчанию", как объяснено в связанном FAQ, потому что он может или не может создавать элементы по умолчанию.Но тогда у нас будет такая же проблема для инициализаторов в классе, просто здесь Foo() = default;
работает просто отлично.
Итак, почему это запрещено?