我有一个类,想要为这个类重载“+”和“=”运算符。所以我将 operator + 实现为友元函数,将 operator = 实现为成员函数...
如果 operator = 的参数类型定义为引用,则无法运行以下行,因为右侧是值且没有任何地址:
sum = A + B; // sum, A and B are objects of my class
但是我希望能够做这样的分配,并希望通过引用将参数传递给 operator = (因为我的类的对象很大)。是否有可能或我必须通过值??
将参数传递给 operator =答案 0 :(得分:2)
你只需要通过reference-to-const接受参数:
const
sum = A + B
引用可以绑定到rvalues,因此{{1}}有效。
答案 1 :(得分:2)
课程' operator=()
通常会接受const
引用。因此X::operator()
会接受const X &
。这确实允许链接。非const
引用不允许传递A + B
之类的表达式的结果(因为逻辑上需要临时的)。
operator=()
(例如lhs X
和rhs Y
)可以通过值传递(如果Y
具有工作副本构造函数),即{{1但是,传递X &X::operator=(Y)
引用在实践中更为常见,仅仅是因为它减少了创建临时工的机会。
答案 2 :(得分:0)
运算符重载是能够使用引用作为参数的普通函数。请记住使用const引用而不是干净的引用来处理rvalues,因为它们可以将它们的生命延长到函数的范围。
顺便说一句,你没必要将 operator + 声明为朋友功能 - 你也可以让它成为你班级的一员。struct A
{
int x;
A(int x): x(x) {}
A operator+(const A&);
A& operator=(const A&);
};
A A::operator+(const A& right_side_of_equation)
{
...
}
A& A::operator=(const A& object_to_be_assigned)
{
...
}