首页 > 解决方案 > 运算符重载中的返回类型

问题描述

假设有以下类定义:

template <typename T> class Foo {
public:
    T x;
    Foo(T x): {x = 1;}
} 

并重载以下函数:

// function 1
Foo<T> operator*(T s) const {
    return Foo<T>(x*s);
}

// function 2
Foo<T> &operator*=(T s) {
    x *= s;
    return *this;
}

现在,我实例化一个对象:

Foo<float> foo;
float y = 2.2;

然后,二元运算符foo * y返回一个类型的对象,Foo<float>因为yis float。相反,如果y是 type intfoo * y将返回一个 type 的对象,Foo<int>因为yis an int。在这种情况下,即使x*s返回 a float,它也会被int构造函数强制转换为。

结论bar是类型Foo<T>,其中T是我乘以 foo 的标量类型。


现在,考虑赋值运算符*=。然后,foo *= y返回对 的引用foo

结论:不管是什么类型yfoo还是会是类型 Foo<float>

如果我错了,你能纠正我吗?另外,如果我写:

Foo<int> foo;
float y = 2.2;

参数在传递给函数 1 和 2 之前被y向下转换?int

标签: c++castingoperator-overloading

解决方案


推荐阅读