Que*_*ark 6 c++ operator-overloading pass-by-reference
C++的新手.我见过人们通常在运算符重载时通过引用传递对象.好吧,我无法弄清楚什么时候真的有必要.如下面的代码所示,如果我在operator +中删除对象c1和c2的声明中的&符号,我仍然会得到相同的结果.当我们不想修改c1或c2时,在这种情况下是否有任何理由通过引用?
#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;
}
Run Code Online (Sandbox Code Playgroud)
运算符就像普通函数一样,只是带有“花哨的”名称:)
(例如operator+()而不是sum())
因此,您应用于函数的相同参数传递规则也可以应用于重载运算符。
特别是,当您拥有一个不便宜的参数复制时(例如int,a,a float,是廉价复制参数的示例; a std::vector,a std::string,是不便宜复制的参数示例),并且您在方法内部观察到此参数(即它是一个输入只读参数),然后可以通过const reference传递它 (const &)。
这样,基本上就像将原始参数的地址传递给函数一样,因此不涉及任何深层复制。深度复制可能非常昂贵,例如,想到具有大量元素的向量。
因此,回顾一下,您可以在以下情况下通过const引用传递:
| 归档时间: |
|
| 查看次数: |
6026 次 |
| 最近记录: |