【发布时间】:2011-06-28 04:12:45
【问题描述】:
如果我在 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++ 规范中找不到关于此的相关部分,如果有人能引用一些具体的内容来说明它是否合法,那就太好了。
【问题讨论】:
-
嵌套类的成员函数遵循常规访问规则,对其封闭类的成员没有特殊的访问权限。:publib.boulder.ibm.com/infocenter/comphelp/v8v101/…
-
@aaa- 感谢您的链接,但这似乎只适用于 IBM 的编译器,我知道它确实对规范有一些限制(例如,允许您获取标签的地址
&&运算符)。抱歉,如果我是这个问题的忠实拥护者,但我教的是一门 C++ 编程课程,并且想在告诉我的学生任何事情之前非常确定答案。 -
我不这么认为,因为如果是这种情况,那么我们就不需要在类主体中明确地声明友类。在这种情况下,一个声明就足够了
-
@template AFAIK 他们专门列出了非标准扩展。
-
顺便问一下,问题不是“它是不是朋友”,而是“它是否有私人访问权限”。 (前者足够,但不是必须的。)
标签: c++ friend nested-class