Почему конструктор класса не обозначают как void?
Мне известно, что конструктор не возвращает никакого значения, но тогда почему с ним нельзя использовать ключевое слово void, которое как раз таки и дает такое свойство.
Ответы (2 шт):
Конструктор это не стандартная функция. В ней не работают спецификаторы типов const , volatile и const volatile у тех составных членов, у которых ещё не был вызван их конструктор. У конструктора нельзя взять его адрес. Он не может быть сконструирован шаблонами. У него нет имени. Инициализация
complex zz = complex(1,2.3);
не вызывает функцию с этим именем. Это служебный участок кода, вызываемый при конструирования объекта.
И он не возвращает значения.
Стандарт разрешает декларировать только в форме без возвращаемого типа.
11.4.4 Constructors [class.ctor]
1
A constructor is introduced by a declaration whose declarator is a function declarator (9.3.3.5) of the form
ptr-declarator ( parameter-declaration-clause )
noexcept-specifier opt attribute-specifier-seq opt
where the ptr-declarator consists solely of an id-expression, an optional attribute-specifier-seq, and optional surrounding parentheses, and the id-expression has one of the following forms:
(1.1)
— in a member-declaration that belongs to the member-specification of a class or class template but is not a friend declaration (11.9.3), the id-expression is the injected-class-name (11.1) of the immediately-enclosing entity or
(1.2)
— in a declaration at namespace scope or in a friend declaration, the id-expression is a qualified-id that names a constructor (6.5.3.1).
Constructors do not have names. In a constructor declaration, each decl-specifier in the optional decl-specifierseq shall be friend, inline, constexpr, or an explicit-specifier.
struct S {
S();
// declares the constructor
};
S::S() { }
// defines the constructor
Нужно как-то различить компилятору функцию от конструктора
У конструкторов нету возвращаемого значения. Это объясняется тем, что конструктор автоматически вызывается системой, и, следовательно, не существует вызывающей программы или функции, которой конструктор мог бы возвратить значение.