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;