为什么在运算符重载时返回允许的构造函数?

时间:2014-09-01 23:43:28

标签: c++ constructor operator-overloading

为什么在运算符重载时返回允许的构造函数?

以下是一个例子:

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;
}

1 个答案:

答案 0 :(得分:10)

在C ++中,语法: Typename(arguments)表示创建类型为 Typename 1 的未命名对象(也称为临时对象) 。参数传递给该对象的构造函数(或用作基本类型的初始化器)。

它与你的第二个例子非常相似:

Complex somenumber( Real, Imaginary);
return somenumber;

唯一的区别是对象有一个名字。

两个版本之间存在一些细微差别,这些差异与复制或将对象移回调用函数有关。 More info here

1 除非part of a function declaration