“void” 重载运算符的返回类型 [duplicate]

"void" Return type for overloaded operator [duplicate]

提问人:underloaded_operator 提问时间:10/24/2023 更新时间:10/24/2023 访问量:59

问:

我目前正在学习 Dingle (2021) 的“面向对象设计选择”,这是我面向对象设计课程的必修教科书。在阅读“移动语义”一章时,我遇到了一个讨论深层和浅层复制的例子,这让我感到很不寻常。

本章的前半部分深入探讨了复制语义,特别是复制构造函数和重载赋值运算符。

为清楚起见,书中提供了相关示例,并进行了简化,如下所示:

class goodMM {
private:
    int* m_heapData;
    int m_size;

    void copyData(const goodMM& other) {
        // ...
    }

public:
    goodMM(int size) {
        // ...
    }

    ~goodMM() {
        // ...
    }

    goodMM(const goodMM& other) {
        // ...
    }

    void operator=(const goodMM& other) {
        // ...
    }
}

让我印象深刻的部分是定义。我被告知应该始终返回引用以允许:operatoroperator&

  • 链接分配a = b = c
  • 效率(避免复制,因为复制可能很昂贵)

我试图在谷歌和 SO 搜索引擎上找到与此主题相关的内容,但结果产生了运算符。还检查了cppreferences,它们都返回了T类型的引用。void*()[T&]

在这种情况下,宣布为无效有什么具体的好处或好处,正如书中的例子所证明的那样?operator=

C++ 赋值运算符

评论


答: 暂无答案