検討:
class A {
protected:
int _i;
};
class B : public A {
B(const B & object) {
_i = object._i;
};
B(const A & object) {
_i = object._i;
};
};
パーミッションはオブジェクトではなくクラスに基づいているため、最初のコピーコンストラクターは正しいです。したがって、自分のクラスオブジェクトから保護されたメンバーに到達できます。2番目のコンストラクター(または同様のメソッド)でコンパイル時エラーが発生するのはなぜですか?
つまり、この場合、C ++でのアクセス許可チェックがクラス継承ルールを考慮しないのはなぜですか?
また、これはApple LLVM-4.2で発生しましたが、AppleLLVM-4.1では発生しませんでした。