C++ 运算符重载中返回的类型

C++ 运算符重载中返回的类型,c++,casting,operator-overloading,C++,Casting,Operator Overloading,假设具有以下类定义: template <typename T> class Foo { public: T x; Foo(T x): {x = 1;} } 参数y在传递给函数1和2之前被降级为int。您似乎误解了模板。乘法运算符返回Foo(在第一个示例中),因为模板类型T是float。如果foo是foo,则执行foo*1将int值1转换为调用的float值1.0f。实际上,我对函数声明有点困惑。我认为ts采用了s类型,因此函数返回了Foo,其中T类型为s。相反,

假设具有以下类定义:

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

参数
y
在传递给函数1和2之前被降级为
int

您似乎误解了模板。乘法运算符返回
Foo
(在第一个示例中),因为模板类型
T
float
。如果
foo
foo
,则执行
foo*1
int
1
转换为调用的
float
1.0f
。实际上,我对函数声明有点困惑。我认为
ts
采用了
s
类型,因此函数返回了
Foo
,其中
T
类型为
s
。相反,
T
总是指类的泛型类型,对吗?是的,这是正确的。您似乎误解了模板。乘法运算符返回
Foo
(在第一个示例中),因为模板类型
T
float
。如果
foo
foo
,则执行
foo*1
int
1
转换为调用的
float
1.0f
。实际上,我对函数声明有点困惑。我认为
ts
采用了
s
类型,因此函数返回了
Foo
,其中
T
类型为
s
。相反,
T
总是指类的泛型类型,对吗?是的,这是正确的。
// 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<int> foo;
float y = 2.2;