C++关于类中重载运算符的问题

class Type{
    int i;
public:
    friend const Type operator-(const Type& a)
    {
        return Type(-a.i);
    }

    friend Type& operator-(Type& a)
    {
        a.i *= -1;
        return a;
    }
}; 

为什么书上的代码 要将这种一元的运算符重载(+除外)用新创建一个类对象 再按值进行返回的方式来重载呢,是为了使用临时对象语法吗还是其他的原因呢?
还有就是可不可以简单的理解为如果是创建一个新的对象来返回就按照值进行返回,没有创建新对象进行返回(返回传入参数或者this指针的解引用这种)就简单记忆为按照引用进行返回呢?

必须考虑如下语意
b = a - a
这种情况,如果你不返回新对象,而是直接在当前对象上减,结果就不对了。