Если оптимизация не включена, будет создана и возвращена копия c. Если доступна оптимизация именованных возвращаемых значений (NRVO), компилятор может исключить копию.
Кроме того, почему не сложен класс с конструктором:
class Complex
{
public:
Complex( double r = 0.0, double i = 0.0 )
: re( r )
, im( i )
{}
double re;
double im;
};
Тогда, если вам все еще нужна функция типа Complex ComplexCreate (double r = 0., doublei = 0.), Она будет выглядеть так:
Complex ComplexCreate( double r= 0.0, double i = 0.0 )
{
return Complex( r, i );
}
Возвращение здесь безымянной временной переменной означает, что компиляторы без оптимизации именованного возвращаемого значения (NRVO) будут иметь больше шансов удалить копию локального объекта - вместо этого, работая напрямую со стеком вызывающих.