конструктор с одним параметром по умолчанию - PullRequest
7 голосов
/ 24 октября 2010

Предположим, у меня есть класс

class C {
       C(int a=10);
};

, почему, если я вызываю

C c;

, вызывается конструктор C(int =10) и если я вызываю

C c();

конструктор по умолчанию называется?Как этого избежать?Я хочу выполнить только свой конструктор, я пытался сделать конструктор по умолчанию закрытым, но он не работает.

Ответы [ 3 ]

17 голосов
/ 24 октября 2010
  1. На самом деле, C c(); следует анализировать как объявление функции .Чтобы явно вызвать конструктор по умолчанию, вам нужно написать C c = C();.
  2. После того, как вы определите любой конструктор, компилятор не предоставит конструктор по умолчанию для вашего типа, так что никто не может быть вызван.
  3. Поскольку ваш конструктор может быть вызван с одним аргументом, он служит неявной функцией преобразования.Вам следует подумать о том, чтобы сделать его explicit, чтобы предотвратить неявные преобразования в неожиданные моменты.
14 голосов
/ 24 октября 2010

Код C c(); не делает то, что вы думаете, он делает:

Он объявляет функцию с именем c, которая не принимает аргументов и возвращает C. Это эквивалентно

C c(void);
1 голос
/ 25 октября 2010

Это потому, что c() интерпретируется как функция с именем c. C() вызовет соответствующий конструктор для C класса

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