【发布时间】:2013-07-15 23:36:59
【问题描述】:
我一直在阅读this article,并且在玩了一段时间的成员空间成语时,我注意到这个 sn-p 中的一些东西让我感到惊讶(编译没有问题:http://ideone.com/hRiV5B):
class HugeClass
{
public:
struct memberspace
{
int f() const { return parent.f; }
private:
friend HugeClass;
explicit memberspace(HugeClass & parent)
: parent(parent) {}
HugeClass & parent;
} memberspace;
HugeClass() : memberspace(*this), f(42) {}
private:
int f;
};
我预计会出现编译器错误,即不允许访问 HugeClass::f,因为 f 在该上下文中是私有的。
HugeClass 是friend 的memberspace,所以HugeClass 可以调用memberspace 的私有构造函数,但是为什么它在没有明确声明memberspace 的情况下反其道而行之? HugeClass?
【问题讨论】:
-
成员空间被认为是 HugeClass 的一部分,因此具有完全访问权限。