我一直在阅读这篇文章,并且正在使用 memberspace 成语一段时间,当我注意到这个片段中的一些东西让我感到惊讶时(编译没有问题: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
is a friend
of memberspace
,所以HugeClass
可以调用 of 的私有构造函数memberspace
,但是为什么它在没有明确声明memberspace
a friend
of 的情况下反其道而行之HugeClass
?