C++重载赋值运算符在不相关的类中被调用

C++ overloaded assignment operator gets called in unrelated classes

本文关键字:调用 不相关 重载 赋值运算符 C++      更新时间:2023-10-16

在下面的代码中,我不明白为什么为类 B 的赋值调用类的重载赋值运算符,因为这些类不相关(继承)?

class A {
public:
    void operator=(const A& rhs) {
        if (this == &rhs) cout << "self-assigned";
    }
};
class B {
    A a; // should not be a pointer member, (i.e) A* a
}; 
int main() {
    B b;
    b = b;  // Ans: self-assigned
}

此外,如果在类 B 中实现了任何自定义赋值运算符,则调用该运算符将优先于类 A。

如果未提供赋值运算符,编译器将自动生成一个对类的每个成员执行赋值的赋值运算符。在此自动生成的赋值运算符中,将调用 A 赋值运算符的重载。

它被调用为您声明的成员变量。您正在复制对象(复制到同一对象中),因此默认赋值运算符正在复制每个成员变量。

此运算符(编译器生成)复制每个成员(递归)。它的工作原理是在实例中的每个字段上调用复制构造函数,并在要从中创建副本的对象中调用相应的字段。

也看看 http://en.cppreference.com/w/cpp/language/as_operator