Сообщение Re[6]: Почему нельзя писать void ctor(); от 24.04.2017 14:42
Изменено 24.04.2017 15:11 rg45
Re[6]: Почему нельзя писать void ctor();
Здравствуйте, Максим Рогожин, Вы писали:
N>>А почему этот синтаксис надо запрещать?
МР>Потому, что конструктор это функция, которая не возвращает никаких значений. Вот, например
МР>
Ты сам себя загоняешь в заблуждение, пытаясь рассматривать это выражение как значение, возвращаемое функцией. В то время как никто никого здесь не возвращает — это прямое конструировние объекта имя типа которого задается конструктором. Это по смыслу то же самое что и
Нет здесь никакого возвращаемого значения, видишь?
N>>А почему этот синтаксис надо запрещать?
МР>Потому, что конструктор это функция, которая не возвращает никаких значений. Вот, например
МР>
МР>A obj = A(1024); // значит и так нельзя писать... Потому, что функция-конструктор,
МР> // с точки зрения синтаксиса, похожа на функцию createObject(int) тем,
МР> // что у нее нет возвращаемого значения.
МР>Ты сам себя загоняешь в заблуждение, пытаясь рассматривать это выражение как значение, возвращаемое функцией. В то время как никто никого здесь не возвращает — это прямое конструировние объекта имя типа которого задается конструктором. Это по смыслу то же самое что и
int obj = int(1024);Нет здесь никакого возвращаемого значения, видишь?
Re[6]: Почему нельзя писать void ctor();
Здравствуйте, Максим Рогожин, Вы писали:
N>>А почему этот синтаксис надо запрещать?
МР>Потому, что конструктор это функция, которая не возвращает никаких значений. Вот, например
МР>
Ты сам себя загоняешь в заблуждение, пытаясь рассматривать это выражение как значение, возвращаемое функцией. В то время как никто никого здесь не возвращает — это прямое конструировние объекта имя типа которого задается конструктором. Это по смыслу то же самое что и
Нет здесь никакого возвращаемого значения, видишь?
Сам по себе конструктор — это всего лишь процедура, единственная задача которой сконструировать объкт в заданной области памяти. Указатель на эту область памяти передается конструктору неявно, и доступна эта область памяти внутри конструктора как this. Никаких значений он возвращать не может в принципе, потому что один и тот же конструктор может вызываться:
для создания rvalue объекта во области памяти:
в статической или автоматической:
в динамической:
а также в неизвестной:
И это все одна и та же процедура! Как она может что-то возвращать при таком разнообразии сценариев использования?
N>>А почему этот синтаксис надо запрещать?
МР>Потому, что конструктор это функция, которая не возвращает никаких значений. Вот, например
МР>
МР>A obj = A(1024); // значит и так нельзя писать... Потому, что функция-конструктор,
МР> // с точки зрения синтаксиса, похожа на функцию createObject(int) тем,
МР> // что у нее нет возвращаемого значения.
МР>Ты сам себя загоняешь в заблуждение, пытаясь рассматривать это выражение как значение, возвращаемое функцией. В то время как никто никого здесь не возвращает — это прямое конструировние объекта имя типа которого задается конструктором. Это по смыслу то же самое что и
int obj = int(1024);Нет здесь никакого возвращаемого значения, видишь?
Сам по себе конструктор — это всего лишь процедура, единственная задача которой сконструировать объкт в заданной области памяти. Указатель на эту область памяти передается конструктору неявно, и доступна эта область памяти внутри конструктора как this. Никаких значений он возвращать не может в принципе, потому что один и тот же конструктор может вызываться:
для создания rvalue объекта во области памяти:
A obj = A(1024);в статической или автоматической:
A obj(1024);в динамической:
A* obj = new A(1024);а также в неизвестной:
new(aPointer) A(1024);И это все одна и та же процедура! Как она может что-то возвращать при таком разнообразии сценариев использования?