具有多个返回的RVO运算符
RVO Operators With Multiple Returns
我们在课堂上与RVO合作,展示如何减少创建的临时仓库数量。
我掌握了它的基本知识,但我很难理解如何将多个值组合成一行。
对于单次温度优化,我能够很容易地理解
const A operator + ( const A &tmp)
{
A sum;
sum = this->x + tmp.x;
return sum;
}
可以简化为:
const A operator + ( const A &tmp)
{
return A(this->x + tmp.x);
}
然而,我不确定如何将其应用于要返回多个值的函数。例如:
Vect2D operator - ( const Vect2D &tmp ) const;
Vect2D Vect2D::operator - ( const Vect2D &tmp ) const
{
Vect2D sum;
sum.x = this->x - tmp.x;
sum.y = this->y - tmp.y;
return ( sum );
};
我的流程是:
Vect2D Vect2D::operator - ( const Vect2D &tmp ) const
{
return Vect2D((this->x - tmp.x), (this->y - tmp.y));
};
返回时出现一个错误,告诉我"no argument takes the value (float, float)
"。
我必须重新组织最初的吗
Vect2D运算符-(const-Vect2D&tmp)const;
在里面接受两个浮点参数?还是我想错了?
谢谢你,
E:感谢Matt和Jerry肯定了我认为我需要对双浮点运算符做的事情。
我的问题的解决方案是不理解运算符需要Friend函数才能有两个参数。虽然不完全是RVO,但解决方案确实减少了通过包含两个变量的返回所创建的临时数。
再次感谢马特和杰瑞让我开始了这个过程。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 当使用三元运算符并删除移动/复制CTOR时,Visual Studio不执行RVO
- 具有多个返回的RVO运算符