通过引用传递自定义类型-任何性能优势
Passing custom types by reference — any performance benefit?
编译后的代码有区别吗?
point operator-(point const&a,point const&b)
和
point operator-(point a,point b)
?其中point
是自定义结构?
我想是的。point operator-(point const&a,point const&b)
更好有两个原因:通过引用传递意味着您可以避免重新复制对象的开销。另一个是它引用了const
,这意味着const
和point
的非const版本都可以使用这个函数。
可以。
使用第一种方法,生成a
和b
的副本并传递给函数。如果Point
是一个大的class
或struct
,这可能是昂贵的。
通过引用传递const
的好处是
- 你可以在
const
对象上使用这个方法,因为你已经阻止了对变量的修改 你可以安全地传递一个临时函数。
这在很大程度上取决于构造函数的复杂性和对象的大小。
如果我们有:
class point
{
int x;
int y;
public:
point(int ax, int ay) : x(ax), y(ay) { }
};
则好处非常小,如果有的话(因为operator-
中的使用将更加复杂)。
point
是:
class point
{
BigInt<200> x;
BigInt<200> y;
public:
point(int ax, int ay) : x(ax), y(ay) { }
};
其中BigInt
是用于"大数"计算的200字节数组,因为您以飞米为单位模拟整个宇宙。当然,复制200 * 2字节* 2对象的工作量很大,按值传递不是一个好主意。
同样适用于创建/销毁point
对象很复杂的情况(例如,如果构造函数分配内存…)。
但是就像我上面暗示的那样,它也取决于operator-
中的使用-如果有很多访问必须在引用上完成,它可以比直接复制参数堆栈慢。
相关文章:
- 与纯 V8 相比,NodeJS 是否有任何性能缺陷或显著开销?
- 在类中始终使用此指针是否有任何性能成本
- 从交换机块返回时的任何性能差异
- 任何性能问题都在qt框架中使用了stackedwidget的最大页面数
- 使用 const CString& 而不是单独使用 CString 作为函数参数是否有任何性能优势?
- 当使用不相等vs均等时,是否存在任何性能差异
- 重载运算符:常量与非常量返回类型:任何性能差异
- 在类中包装int的任何性能惩罚
- HBase上的节俭是否有任何性能基准
- 静态关键字是否提供任何性能提升
- 从抽象类继承的抽象方法是否存在任何性能问题
- 可以使用 char[] 作为参数、返回等来解决任何性能问题
- std::copy 和容器的复制构造函数之间是否存在任何性能差异?
- 包含每个标头是否有任何性能影响
- 直接使用C++WinRT组件或C++XAML项目是否存在任何性能问题
- 使用std::move是否有任何性能上的好处?
- 只有2个元素的元组是否有任何性能损失?
- 为什么我无法通过在 C++11 中运行多个线程来获得任何性能改进?
- signal():任何性能影响
- 通过引用传递自定义类型-任何性能优势