通过引用传递自定义类型 - 任何性能优势?

时间:2014-03-14 21:45:49

标签: c++ performance parameters reference

编译代码有什么不同:

point operator-(point const&a,point const&b)

point operator-(point a,point b)

? 其中point是一个自定义结构?

3 个答案:

答案 0 :(得分:0)

我会这么认为。 point operator-(point const&a,point const&b)更好有两个原因:通过引用传递意味着您可以避免重新复制对象的开销。另一个事实是它引用了const,这意味着constpoint的非对象版本都可以使用此函数。

答案 1 :(得分:0)

使用第一种方法制作ab的副本并传递给该函数。如果Point为大classstruct,则费用可能会很高。

const通过引用传递的好处是

  • 您可以在const个对象上使用该方法,因为您已阻止修改变量
  • 您可以安全地将临时函数传递给函数。

答案 2 :(得分:0)

这在很大程度上取决于构造函数的复杂性和对象的大小。

如果我们有:

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字节数组,因为您以femtometers为单位模拟整个Universe。当然,复制200 * 2字节* 2对象的努力会导致大量复制,并且不值得传递值。

如果创建/销毁point对象很复杂(如果构造函数是例如分配内存......),则同样适用。

但就像我在上面暗示的那样,它也取决于operator-中的用法 - 如果必须对引用进行大量访问,它可能会减慢速度而不是直接复制参数堆栈。