C++重载赋值运算符在不相关的类中被调用
C++ overloaded assignment operator gets called in unrelated classes
在下面的代码中,我不明白为什么为类 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
相关文章:
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- std::less是否应该允许在编译时比较不相关的指针?
- C++ 编译器错误:P1LinkedList.cpp:145:错误:重载的"to_string(int&)"调用不明确
- 为什么对模板的调用不模棱两可?
- 调用不在基类中的派生类函数而不进行动态强制转换,以最大程度地提高性能
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 0 的 2D 数组 不相关循环的破坏逻辑 - C++
- 为什么数组到指针的输出不相关
- 如何使用模板元编程在自由函数C++链接两个不相关的类
- C++协程:调用不带co_await的协程函数
- 如何在C++中停止调用不兼容的方法?
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 计算一个单词在映射中出现的次数 - 使用 transform() - 调用不匹配
- 为什么在使用不相关的宏时会阻止 while 循环结束?
- std::使用内部对象移动 - 与调用不匹配
- C++中的神秘:函数调用行为不端只是因为存在另一个函数调用,即使它们是不相关的
- C++重载赋值运算符在不相关的类中被调用
- 当将不相关类型定义为别名时,对函数的调用是不明确的
- C++ 函数调用后不相关的指针更改