如果我在C ++中定义一个内部类,它是否自动成为包含它的类的朋友?例如,这合法吗:
class Outer {
public:
class Inner {
public:
void mutateOuter(Outer& o);
};
private:
int value;
};
void Outer::Inner::mutateOuter(Outer& o) {
o.value ++; // Legal? Or not?
}
我问,因为在某些我尝试过的编译器(VS2003)上,此代码无法正常工作,但我至少听说过它在某些编译器上确实有效。我无法在C ++规范中找到与此相关的部分,并且如果有人可以引用某些特定的东西,那就说这是合法的或不合法的,那将是很好的。