【发布时间】:2014-04-11 23:16:09
【问题描述】:
class A {
public:
int a;
};
class B: private A {
};
class C: public A {
};
class D: public B, public C {
D() {
B::a = 0;
}
};
即使 B 私下继承了 A,这也会编译。如果我删除 D 对 C 的继承,编译器会说 a 不可访问,就像我所期望的那样。那么 C 的继承会让我的编译器感到困惑吗?
编译器是 gcc 4.4.7
【问题讨论】:
-
可能是钻石继承规则的干扰......这将是一个错误。
-
@Hans:想更具体一点吗?您是在建议替代方案吗?
-
如果没有
B::分辨率,它会更有趣,并且它实际上已编译。这确实不用clang 3.4编译(有或没有B::分辨率)。 -
这是MCVE。当然这是不合理的。顺便说一句,我什至看不出它在野外可能合理地发生在哪里。并不是说没有这样的独角兽。
-
@chuck1:访问和可见性是不同的、不相关的概念。访问被检查最后。
标签: c++ gcc multiple-inheritance language-lawyer compiler-bug