Почему конструктор класса не обозначают как void?

Мне известно, что конструктор не возвращает никакого значения, но тогда почему с ним нельзя использовать ключевое слово void, которое как раз таки и дает такое свойство.


Ответы (2 шт):

Автор решения: AlexGlebe

Конструктор это не стандартная функция. В ней не работают спецификаторы типов 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
→ Ссылка
Автор решения: ТарасПрогер
  1. Нужно как-то различить компилятору функцию от конструктора

  2. У конструкторов нету возвращаемого значения. Это объясняется тем, что конструктор автоматически вызывается системой, и, следовательно, не существует вызывающей программы или функции, которой конструктор мог бы возвратить значение.

→ Ссылка