直到 C++11(即 C++98 和 C++03)
在 C++98 和 C++03 中,嵌套类默认不能访问private
和protected
封闭类的成员。
C++ 标准 (2003) 在 $11.8/1 [class.access.nest] 中说,
嵌套类的成员对封闭类的成员没有特殊的访问权限,也没有对已授予封闭类友谊的类或函数的特殊访问权限;应遵守通常的访问规则(第 11 条)。封闭类的成员对嵌套类的成员没有特殊的访问权限;应遵守通常的访问规则(第 11 条)。
标准本身的示例:
class E
{
int x;
class B { };
class I
{
B b; // error: E::B is private
int y;
void f(E* p, int i)
{
p->x = i; // error: E::x is private
}
};
int g(I* p)
{
return p->y; // error: I::y is private
}
};
自 C++11 起
自 C++11 起,上述限制已被删除。现在嵌套类可以访问封闭类的private
和protected
成员:
class E
{
int x;
class B { };
class I
{
B b; // ok: even though E::B is private
int y;
void f(E* p, int i)
{
p->x = i; // ok: even though E::x is private
}
};
int g(I* p)
{
return p->y; // ok: even though I::y is private
}
};
希望有帮助。