关于C++强制类型转换函数和转换构造函数的问题
class Complex
{
public:
Complex():real(0),imag(0){};
Complex(double r, double i):real(r),imag(i){};
Complex(double r):real(r),imag(0){}; // 定义转换构造函数
void Print(){
cout<<"real = " << real <<" image = "<<imag<<endl;
}
operator double(){ // 定义类型转换函数
return real;
}
private:
double real;
double imag;
};
int main(int argc, _TCHAR* argv[])
{
Complex c1(1.2, 2.3);
double d;
d = c1 + 1.1; //我不解的地方
cout<<d<<endl;
return 0;
}
这是网上一篇文章里的例子,文章里说,对于表达式语句“d = c1 + 1.1; ”,是先将c1利用强制类型转换函数转换成double类型,然后和1.1相加,最后赋值给d。
但我觉得,还有另外一条路径:先利用转换构造函数将1.1转换成一个临时的无名对象,再和c1执行“+”运算符计算(上面例子中没有给出“+”运算符计算,假设有哈!!!),然后将计算结果通过强制类型转换函数转换成d,好像通路也是可以的啊。那这两条通路,编译器到底会取哪条呢?因为不同的通路,很有可能结果完全不同的。