c++ - 为类重载 = 运算符

标签 c++ operator-overloading

我最近更新了运算符重载方面的 C++ 知识。按照建议,我返回对 *this 的引用以获取“=”的运算符重载。但是后来我发现了一个问题:-

#include <iostream>
using namespace std;

class MyClass
{
    int num = 4;
    public:
        MyClass() = default;
        MyClass(int x) : num(x) {}
        void getnum(int x)
        {
            num = x;
        }
        void shownum()
        {
            cout << num << '\n';
        }
        MyClass& operator = (const MyClass& obj)  // works even without const
        {
            this->num = obj.num;
            return *this;
        }
        ~MyClass() = default;
};

int main()
{
    MyClass x, y(5), z(7);

    z = MyClass(8) = y;   // temporary object return reference

    x.shownum();
    y.shownum();
    z.shownum();
}

此代码不会生成 UB,即使其中涉及一个临时对象 MyClass(8),其间将等同于 y (很好,没问题)但是随后它的引用将被发送以等同于 z。为什么悬挂引用问题不会出现在这里?为什么重载函数在临时对象“MyClass(8) 上没有const MyClass&”的情况下工作?

最佳答案

临时变量一直存在到完整的表达式结束。最后,临时文件消失了,但到那时所有分配都已执行,并且由于您没有将引用存储在任何地方,所以临时文件消失是可以的。

关于c++ - 为类重载 = 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057061/

相关文章:

c++ - 当有复制构造函数时,是否总是需要赋值运算符?

c++ - 指针和引用 + 重载运算符

c++ - 使用 g++ 4.8 (Mac Ports) 在 Mac OS X 上编译 boost::program_options

c++按值传递的复制构造函数参数

c++ - 我们应该删除一个不是 new/malloc 的指针吗?

rust - 我如何实现 std::ops::Index 来改变被索引的值?

c++ - 给定指针调用括号重载

c++ - 将逗号分隔的参数传递给 << 运算符

c++ - 非静态成员函数的无效使用 - Arduino - Automaton

c++ - 任何人都有解决此 gcc 编译器错误 : macro "min" passed 3 arguments but takes just two 的方法