c++中重载+=运算符
程序员文章站
2024-03-17 20:43:04
...
背景:今天在使用pair<int,int>时,想重载它的+=运算符,写成了如下形式:
pair<int,int> operator += (pair<int,int> a, pair<int,int> b)
{
return make_pair(a.first+b.first,a.second+b.second);
}
结果发现在进行+=操作后,+=的左值并没有发生改变,
转念一想,使用操作符实际上可以理解为一次函数的调用,因此,我想得到的值作为返回值返回了,但我并没有去使用它,因此,我们可以这么写:
但是,这种写法显然不是我们想要的,因此,我们应该思考如何在重载函数内部改变a的值。
在我们现在这种写法下,在重载函数中的形参实际上只是实参在函数内部的一个副本,除了值相同外,形参与实参无其它联系, 因此,我们考虑用某种方式将实参传递到函数内部,常见的方法有两种:
引用传递:
指针传递:
当然,这个第二种写法并不是那么的自然,因此在重载函数中用引用来接受实参可能是一种比较理想的方法。