cppreference说:
因为总是为任何类声明复制赋值运算符,所以基类赋值运算符总是隐藏的。如果使用 using-declaration 从基类引入赋值运算符,并且其参数类型可以与派生类的隐式赋值运算符的参数类型相同,则 using-declaration 也被隐式隐藏宣言。
据我了解,以下代码不应编译。因为
- B::operator=(const B&) 是隐式声明的。
- A::operator=(const A&) 和 using-declaration 都是隐藏的。
#include <iostream>
using namespace std;
class A {
public:
A& operator=(const A& A) {
cout << "A::opreator=" << endl;
}
};
class B : A {
public:
using A::operator=;
};
int main() {
A a1;
B b1;
b1 = a1;
}
但是,它编译成功并打印“A::operator=”,为什么?