编译代码有什么不同:
point operator-(point const&a,point const&b)
与
point operator-(point a,point b)
?
其中point
是一个自定义结构?
答案 0 :(得分:0)
我会这么认为。 point operator-(point const&a,point const&b)
更好有两个原因:通过引用传递意味着您可以避免重新复制对象的开销。另一个事实是它引用了const
,这意味着const
和point
的非对象版本都可以使用此函数。
答案 1 :(得分:0)
是
使用第一种方法制作a
和b
的副本并传递给该函数。如果Point
为大class
或struct
,则费用可能会很高。
让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-
中的用法 - 如果必须对引用进行大量访问,它可能会减慢速度而不是直接复制参数堆栈。