运算符重载中的返回类型

时间:2019-03-16 10:03:23

标签: c++ casting operator-overloading

假设具有以下类定义:

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>的对象,因为yfloat。如果y的类型为int,则foo * y将返回类型为Foo<int>的对象,因为yint。在这种情况下,即使x*s返回float,它也将由构造方法强制转换为int

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


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

结论:无论y的类型是什么,foo仍然是类型  Foo<float>

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

Foo<int> foo;
float y = 2.2;

自变量y在传递给函数1和2之前是否向下转换为int

0 个答案:

没有答案
相关问题