C++返回值可否通过调用构造函数得到?

C++返回值能否通过调用构造函数得到??
#include <iostream>
using namespace std;
class Complex
{public:
Complex( ){real=0;imag=0;} //默认构造函数
Complex(double r){real=r;imag=0;}//转换构造函数
Complex(double r,double i){real=r;imag=i;}//实现初始化的构造函数
friend Complex operator + (Complex c1,Complex c2); //重载运算符“+”的友元函数
void display( );
private:
double real;
double imag;
};

Complex operator + (Complex c1,Complex c2)//定义运算符“+”重载函数
{return Complex(c1.real+c2.real, c1.imag+c2.imag);}

void Complex∷display( )
{cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;}

int main( )
{Complex c1(3,4),c2(5,-10),c3;
c3=c1+2.5; //复数与double数据相加
c3.display( );
return 0;
}

请问return Complex(c1.real+c2.real, c1.imag+c2.imag);这里的返回值是不是调用的构造函数呀?
不然Complex(c1.real+c2.real, c1.imag+c2.imag)怎么解释?记得构造函数是不可以显示调用的!

------解决方案--------------------
先用Complex(double r,double i)产生一个临时对象,再复制这个对象到返回值。

如果Complex自定义了复制构造函数,可以触发NRVO返回值优化,直接在返回值上构造(c1.real+c2.real, c1.imag+c2.imag)。