这是一个展示我问题的小例子:
class Foo {
private:
int x;
void y() {
class Bar {
public:
Bar(Foo* foo) {
foo->x = 3;
}
};
Bar bar(this);
}
};
类Foo
,在其成员函数y
内定义的类尝试访问其私有成员x
。这是允许的吗?
Visual Studio 2013可以编译它,但IntelliSense似乎认为私有成员无法访问,并且在嵌入式类方法中键入foo->
时不会列出它们。
答案 0 :(得分:5)
代码有效。
N4140 [class.access] / 2:
类的成员还可以访问该类有权访问的所有名称。成员的本地类 函数可以访问成员函数本身可以访问的相同名称。