我是C++的新手。我需要一些帮助来理解这个代码片段。
Queue & operator=(const Queue &rhs)
{
front = rhs.front;
nWaiting = rhs.nWaiting;
for (int i = front, j = 0; j < nWaiting; j++)
{
elements[i] = rhs.elements[i];
i = (i + 1) % 100;
}
return *this;
}
我不能理解为什么代码中会有一个“&”before运算符,以及这个运算符和*这个运算符是如何工作的。
我理解运算符重载。例如。下面的代码用于加法操作重载。然而,我不明白为什么赋值操作符(=)重载需要'&‘。
V3 operator* (const double factor, const V3 &b)
{
return (b * factor);
}
发布于 2018-05-29 07:32:00
&
表示操作符返回一个引用(原始对象),而不是一个值(对象的副本)。这避免了不必要的复制。this
是指向被调用运算符的对象本身的指针,因此return *this
意味着返回对=
左侧的对象的引用。
这允许像a = b = 1
一样链接运算符。这会首先将1赋给b
,然后返回对b
的引用。然后将b
的值赋给a
。所以a
和b
都是1。
发布于 2018-05-29 02:57:55
运算符没有任何返回值也可以,但是通常会启用链接,如下所示
c = (a = b);
这会将b
分配给a
,然后将operator=
调用的返回值分配给c
。因为你不想做一个不必要的拷贝,所以你返回一个对对象本身的引用,也就是*this
。实际上,避免复制并不是使用引用的唯一原因,但是如果您考虑
(d = e) = f;
如果operator=
返回非常数(!),那么这将只按预期工作(首先将e
分配给d
,然后将f
分配给d
)。参考。
注意,operator*
是不同的,因为它不应该修改在其上调用它的对象,而是返回一个新的实例(因此在operator*
的返回中没有&
)。
https://stackoverflow.com/questions/50572079
复制相似问题