不允许在派生类中调用受保护的构造函数,如此处所述。
接受的答案解释说,仅当 class的对象是 class 的子对象时才protected
授予对基类对象成员的访问权限。到目前为止,一切都很好。A
A
B
但是,为什么允许(至少在 GCC 4.6.3 中)调用静态保护方法?具体来说,以下编译对我来说没有任何意义,而注释行则没有:
class A
{
protected:
A() {}
static A makeA() { return A(); }
};
class B: public A
{
public:
static A makeAFromB()
{
return makeA(); // compiles
// return A(); // does not compile
}
};
从哲学上讲,构造函数非常像返回类对象的静态方法A
,这就是为什么我在这里没有得到行为差异的原因。