Подтвердить что ты не робот

Что возвращает конструктор?

Мой вопрос в том, что возвращает конструктор? Этот вопрос не совсем отличается от "Что такое тип возврата конструктора?" Я где-то читал, что конструктор возвращает полный объект неявно (т.е. Неявный тип возврата - это имя класса), но он не указывается явно.

struct empty{};

int main(){
   empty(); //creates a temporary and implicitly a constructor is called
}

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

4b9b3361

Ответ 1

Конструктор ничего не возвращает. Вызывается конструктор для инициализации объекта. Конструктор может использоваться только для инициализации объекта; вы не можете явно вызвать конструктор явно (во-первых, у конструкторов нет имен).

В приведенном примере empty() не является выражением вызова функции, это инициализация значения. Он создает инициализируемый значением временный объект типа empty.

Ответ 2

Конструкция

возвращает что-то. он возвращает ссылку на объект, на который указывает this. поэтому неявный оператор return из конструктора выглядит как

*this;

Как это используется?

Если вы создаете шаблон класса something с "общим" типом как член, вы вызываете конструктор нулевого параметра по умолчанию для типичного типа явно (т.е. generic()) в конструкторе вашего класса something и инициализировать ваш общий элемент через оператор присваивания и оператор инициализации конструктора something. Конструктор должен что-то вернуть или ничто из этого дерьма, которое я только что написал, не сработает. Это в книге, которую я читаю... lol.

Ответ 3

Конструкторы ничего не возвращают.
Конструкторы называются неявно при создании объекта для инициализации создаваемого объекта.

Ответ 4

В С++, если я правильно помню, ваш код выделит достаточно места для "пустого" в стеке, а затем вызовет пустой конструктор по умолчанию - как указано в() - неявно передав ему эту ссылку. Нет возврата. И в вашем случае нет конструктора.

Ответ 5

Конструктор ничего не возвращает.

Источник путаницы:

Book *b = new Book();

Многие из них смущены приведенным выше кодом, что создает иллюзию, что конструктор возвращает указатель на вновь созданный объект.

Когда вы используете ключевое слово new, компилятор выделяет требуемую память, а затем вызывает конструктор для создания нового объекта в выделенной памяти. Затем new возвращает указатель на этот блок памяти. Конструктор только создает объект и никогда ничего не возвращает.

Ответ 6

что об этом:

int main() {
const empty &er = empty();
empty *ep = const_cast<empty*>(er); //casting away conentness to make changes in the members
cout<<"\n main ends \n";
//dtor get called here
}

ctor возвращает константную ссылку на ячейку памяти (* this), вы можете отбросить константу и использовать ее как обычный объект nonconst, например empty *e = new e;