Что возвращает конструктор?
Мой вопрос в том, что возвращает конструктор? Этот вопрос не совсем отличается от "Что такое тип возврата конструктора?"
Я где-то читал, что конструктор возвращает полный объект неявно (т.е. Неявный тип возврата - это имя класса), но он не указывается явно.
struct empty{};
int main(){
empty(); //creates a temporary and implicitly a constructor is called
}
В соответствии с моей интерпретацией тип неявного возврата должен быть именем класса, в данном случае empty
. Является ли моя дикая интерпретация правильной?
Ответы
Ответ 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;