考虑:
struct A { int x;};
struct B : A {};
struct C : private A {};
Run Code Online (Sandbox Code Playgroud)
现在,正如预期的那样,代码
struct D : C
{
D () { C::x = 2; }
};
int main () { D d; }
Run Code Online (Sandbox Code Playgroud)
不编译:
test2.cc: In constructor ‘D::D()’:
test2.cc:1:16: error: ‘int A::x’ is inaccessible
test2.cc:7:12: error: within this context
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做
struct D : B, C
{
D () { C::x = 2; }
};
int main () { D d; }
Run Code Online (Sandbox Code Playgroud)
然后错误就消失了!是不是也不A::x应该无法访问?这里有什么解释?
我正在使用gcc version 4.7.2 (GCC)linux x86_64,如果这很重要的话.
编辑:它不能用Clang 3.2编译:clang 3.2
但它确实与gcc 4.7.2:gcc 4.7.2