возвратите тип конструктора в C++

Я знаю, что нет никакого типа возврата конструкторов в C++

Однако код ниже права компиляций. Что возвращается конструктором в коде ниже?

class A{

public:
A() {}
}


A a = A();      //what is returned by A() here, why?

Есть ли здесь какой-либо конфликт?

14
задан avakar 6 March 2010 в 04:07
поделиться

2 ответа

Из конструктора ничего не возвращается. Синтаксис A() не является вызовом конструктора, он создает временный объект типа A (и при этом вызывает конструктор).

Вы не можете вызвать конструктор напрямую, конструкторы вызываются как часть построения объекта.

В вашем коде при построении временного объекта вызывается конструктор по умолчанию (тот, который вы определили). Затем, во время конструирования a, вызывается конструктор копирования (сгенерированный компилятором автоматически) с временным объектом в качестве аргумента.

Как правильно отмечает Грег, в некоторых обстоятельствах (включая это) компилятору разрешается избежать построения копии и построить по умолчанию a (при этом конструктор копии должен быть доступен). Я не знаю ни одного компилятора, который бы не выполнял такую оптимизацию.

18
ответ дан 1 December 2019 в 12:38
поделиться

Синтаксис T () , где T - некоторый тип, представляет собой нотацию функционального приведения, которая создает инициализированный значением объект типа T . Это не обязательно связано с конструктором (может быть, а может и нет). Например, int () является совершенно допустимым выражением, а тип int не имеет конструкторов. В любом случае, даже если тип T имеет конструктор, интерпретировать T () как «что-то, возвращенное конструктором» просто неверно. Это не вызов конструктора.

4
ответ дан 1 December 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: