我一直在讀this article的私有成員,並與memberspace成語一會兒玩弄時,我注意到的東西,這個片段(其中編譯沒有問題:http://ideone.com/hRiV5B):內出乎我的意料Memberspaces可以訪問父類
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
是memberspace
一個friend
,所以HugeClass
可以調用memberspace
私人構造,但爲什麼它周圍工作的其他方式沒有明確聲明memberspace
的HugeClass
一個friend
?
成員空間被認爲是HugeClass的一部分,因此具有完全訪問權限。 –