о создании неявного конструктора? - PullRequest
3 голосов
/ 23 января 2012

хорошо известно, что компилятор неявно создает конструктор, но если у нас есть код, подобный этому:

class A
{
    public:
       A(int = 0) {}

};

этот конструктор используется по умолчанию и является оператором преобразования одновременно.

Вопрос:

будет ли компилятор генерировать «пустой» конструктор по умолчанию A() {} в любом случае?

Ответы [ 2 ]

10 голосов
/ 23 января 2012

Нет.Конструктор по умолчанию - это конструктор, который не имеет аргументов или аргументов со значениями по умолчанию.

Итак, вы уже определили конструктор по умолчанию.

Раздел 12.1.5 из C++03 утверждает следующее:

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

Поскольку вы можете вызывать ваш конструктор без аргумента, он является стандартным.Ergo, компилятору не нужно объявлять другое.

0 голосов
/ 23 января 2012

Нет, поскольку вы объявили явный конструктор, компилятор не сгенерирует значение по умолчанию без параметров (это слово?!?).

И, учитывая, что у вашего конструктора есть параметр по умолчаниюзначение, если бы вы создали экземпляр класса следующим образом:

void main()
{
    A myA;
}

ваш явный конструктор будет называться ..

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