为什么在运算符重载时返回允许的构造函数?
以下是一个例子:
Complex Complex::operator*( const Complex &operand2 ) const
{
double Real = (real * operand2.real)-(imaginary * operand2.imaginary);
double Imaginary = ( real * operand2.imaginary)+(imaginary * operand2.real);
return Complex ( Real, Imaginary );
}
它似乎是返回对象的构造函数而不是对象本身?什么回到那里?
这似乎更有意义:
Complex Complex::operator*( const Complex &operand2 ) const
{
double Real = (real * operand2.real)-(imaginary * operand2.imaginary);
double Imaginary = ( real * operand2.imaginary)+(imaginary * operand2.real);
Complex somenumber ( Real, Imaginary );
return somenumber;
}
答案 0 :(得分:10)
在C ++中,语法: Typename(arguments)表示创建类型为 Typename 1 的未命名对象(也称为临时对象) 。参数传递给该对象的构造函数(或用作基本类型的初始化器)。
它与你的第二个例子非常相似:
Complex somenumber( Real, Imaginary);
return somenumber;
唯一的区别是对象有一个名字。
两个版本之间存在一些细微差别,这些差异与复制或将对象移回调用函数有关。 More info here