c++ - 运算符重载中的返回类型
问题描述
假设有以下类定义:
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>
因为y
is float
。相反,如果y
是 type int
,foo * y
将返回一个 type 的对象,Foo<int>
因为y
is an int
。在这种情况下,即使x*s
返回 a float
,它也会被int
构造函数强制转换为。
结论:bar
是类型Foo<T>
,其中T
是我乘以 foo 的标量类型。
现在,考虑赋值运算符*=
。然后,foo *= y
返回对 的引用foo
。
结论:不管是什么类型y
,foo
还是会是类型
Foo<float>
。
如果我错了,你能纠正我吗?另外,如果我写:
Foo<int> foo;
float y = 2.2;
参数在传递给函数 1 和 2 之前被y
向下转换?int
解决方案
推荐阅读
- php - 我有 Codeigniter 项目,我不知道要写 Route
- python - 在 python 中用什么代替 fig.canvas.get_tk_widget().update()
- java - 计算由四叉树表示的位图中给定颜色的像素
- java - Java导入jar文件:包func不存在
- scala - reduceLeft 的扩展函数缺少参数类型
- python - BigQuery 数据集 ID 无效
- excel - 保护数据透视表后无法过滤切片器
- firebase - Firebase 可以支持反向 DNS 记录吗?
- javascript - 在多表列中具有多个术语的简单 PHP 过滤器
- javascript - JavaScript 在 Firefox Scratchpad 中运行,但在与 HTML 一起加载时不运行