考虑:
class A {
protected:
int _i;
};
class B : public A {
B(const B & object) {
_i = object._i;
};
B(const A & object) {
_i = object._i;
};
};
第一个复制构造函数是正确的,因为权限基于类,而不是对象。所以我可以从我自己的类对象中访问受保护的成员。为什么第二个构造函数(或任何类似方法)会引发编译时错误?
简而言之:为什么 C++ 中的权限检查在这种情况下不考虑类继承规则?
在 Apple LLVM-4.2 中也遇到过这种情况,但在 Apple LLVM-4.1 中没有。