C++中的私有基类可访问性

Ben*_*Ben 5 c++

我最近不得不这样做:

class A { };
class B : private A { };
class C : public B {
    public:
        A *myA;
};

int main() {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在尝试的三个编译器中出错了.当我改变宣言时myA,::A *myA一切正常.我在C++标准中探讨过,发现了第11.2节第3段,它说:

注意:私有基类的成员可能无法作为继承的成员名称访问,但可以直接访问.

哪个是相关的,但不清楚.为什么名称A无法访问?如果A没有隐藏会出现什么问题?

谢谢,
-Ben

dyp*_*dyp 3

哪里可能“出错”:

namespace nmsp
{
    class A {};
}

class A {};

class B : private nmsp::A
{
    // well-formed:
    A* d; // refers to the injected-class-name nmsp::A!!
};

class C : public B
{
    // ill-formed
    A* p; // refers to the injected-class-name nmsp::A!!
};
Run Code Online (Sandbox Code Playgroud)

它不应该依赖于基子句中的访问说明符是否使用::Anmsp::A,否则在我看来很容易出错。