很新的C++。我看到人们通常在运算符重载中通过引用传递对象。那么,我无法弄清楚什么时候真的有必要。如下面的代码所示,如果我在operator +中声明了对象c1和c2时删除了&符号,我仍然会得到相同的结果。在这种情况下,当我们不想修改c1或c2时,是否有任何理由要通过引用?通过引用传递一个对象重载运算符 - C++
#include <iostream>
class Keys
{
private:
int m_nKeys;
public:
Keys(int nKeys) { m_nKeys = nKeys; }
friend Keys operator+(const Keys &c1, const Keys &c2);
int GetKeys() { return m_nKeys; }
};
Keys operator+(const Keys &c1, const Keys &c2)
{
return Keys(c1.m_nKeys + c2.m_nKeys);
}
int main()
{
Keys cKeys1(6);
Keys cKeys2(8);
Keys cKeysSum = cKeys1 + cKeys2;
std::cout << "There are " << cKeysSum.GetKeys() << " Keys." << std::endl;
system("PAUSE");
return 0;
}
如果不通过引用传递对象(或由指针)作为参数,可以通过值将它们传递,这意味着它们被复制;一些对象的复制可能很昂贵。 – piwi 2014-10-08 07:40:04
那么你删除了需要复制的对象作为params的一件事,如果你采取一个参考,所以它可能会更有效率将参数作为参考 – EdChum 2014-10-08 07:40:12