Объявленный пользователем конструктор по умолчанию + инициализаторы в классе! = Предоставленный пользователем конструктор? [Дубликат]
На этот вопрос уже есть ответ здесь:
Почему в C ++ требуется пользовательский конструктор по умолчанию для конструирования объекта const по умолчанию? 5 ответовClang документация аккуратно объясняет, что
Если у класса или структуры нет определяемого пользователем конструктора по умолчанию, C ++ не делаетt позволяет вам по умолчанию создать его const-экземпляр следующим образом ([dcl.init], p9)
Смысл в том, что если const-объект инициализирован неправильно, он не может быть изменен позже. Следующий код имеет только пользовательскийобъявленный конструктор по умолчанию дляTest
, но все его члены имеют в своем классе инициализаторы,
#include
class Test
{
public:
Test() = default;
void print() const { std::cout < i < "\n"; }
private:
int i = 42; // will propagate to the default constructor!
};
int main()
{
Test const t; //