首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++语法中的赋值运算符重载说明

C++语法中的赋值运算符重载说明
EN

Stack Overflow用户
提问于 2018-05-29 02:48:34
回答 2查看 752关注 0票数 4

我是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);
}
EN

回答 2

Stack Overflow用户

发布于 2018-05-29 07:32:00

&表示操作符返回一个引用(原始对象),而不是一个值(对象的副本)。这避免了不必要的复制。this是指向被调用运算符的对象本身的指针,因此return *this意味着返回对=左侧的对象的引用。

这允许像a = b = 1一样链接运算符。这会首先将1赋给b,然后返回对b的引用。然后将b的值赋给a。所以ab都是1。

票数 3
EN

Stack Overflow用户

发布于 2018-05-29 02:57:55

运算符没有任何返回值也可以,但是通常会启用链接,如下所示

c = (a = b);

这会将b分配给a,然后将operator=调用的返回值分配给c。因为你不想做一个不必要的拷贝,所以你返回一个对对象本身的引用,也就是*this。实际上,避免复制并不是使用引用的唯一原因,但是如果您考虑

(d = e) = f;

如果operator=返回非常数(!),那么这将只按预期工作(首先将e分配给d,然后将f分配给d)。参考。

注意,operator*是不同的,因为它不应该修改在其上调用它的对象,而是返回一个新的实例(因此在operator*的返回中没有& )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50572079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档