Несколько конструкторов по умолчанию - PullRequest
2 голосов
/ 27 марта 2020

С этот вопрос переполнения стека ответ содержит следующую цитату:

... определение говорит, что все конструкторы по умолчанию (если их несколько) ...

Как может быть несколько конструкторов по умолчанию, и почему это может быть полезно или разрешено стандартом?

1 Ответ

5 голосов
/ 27 марта 2020

Конструкторы по умолчанию не должны иметь никаких параметров; они просто должны быть доступны без аргументов.

Это условие выполняется любым конструктором, все аргументы которого имеют значения по умолчанию.

[class.dtor/1]: Конструктор по умолчанию Класс X - это конструктор класса X, для которого каждый параметр, который не является пакетом параметров функции, имеет аргумент по умолчанию (включая случай конструктора без параметров). [..]

struct Foo
{
   Foo(int a = 0);
   Foo(std::string str = "");
};

Теперь, конечно, в этом примере вы не можете на самом деле создать экземпляр Foo, используя любой из них без предоставления аргумента (вызов будет быть неоднозначным). Но Foo все еще можно использовать, и это все еще «конструкторы по умолчанию». Именно так стандарт решил классифицировать вещи с целью определения правил. Это на самом деле не влияет на ваш код или программирование.

(Кстати, я не хотел отвлекать, но вы должны иметь explicit на обоих!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...