-1

当我们通过返回引用分配时,内部 1 和 2 到底发生了什么?

Class A
{
    A& operator= (const A &ax)
    {
        return *this;
    }
}
int main()
{
    A a;
    A b;
    b = a; // -------------- 1
    A c = a;  // ----------- 2
}

// ---------------------------------------------------------------

下面会发生什么不同(分配的返回值)?:

Class A
{
    A operator= (const A &ax)
    {
        return *this;
    }
}
int main()
{
    A a;
    A b;
    b = a; // -------------- 3
    A c = a;  // ----------- 4
}
4

1 回答 1

0

还有一个主要错误,因为operator=设为私有且代码格式错误,但这可以通过添加public:访问修饰符来纠正。

operator=从存储到b变量的对象中调用,因此这种赋值变体根本不应该执行赋值。

#include <iostream>

class A
{
public:
    float a1;

    A& operator= (const A &ax)
    {
        return *this;
    }
};

int main()
{
    A a; 
    a.a1 = 3;

    A b; 
    b.a1 = 5;

    b = a; // -------------- 1

    std::cout << b.a1; // outputs 5

    A c = a;
    std::cout << c.a1; // outputs 3

}

线

A c = a;

被称为初始化并且不使用operator=,而是使用(由编译器生成)复制构造函数,它执行对象的浅拷贝。

您的错误是成员 operator= 旨在将其参数的值分配给this. operator=赋值返回结果,可用于链接:a=b=c;

A& A::operator= (const A &right)

相当于

A& operator= (A &left, const A &right)
于 2018-03-13T06:51:36.770 回答