在C++中,我可以在私有类的作用域外定义一个指向成员的指针吗?

4

请考虑:

class C {
private:
   class T {int a, b;};
};

C::T *p;

正如预期的那样,这会产生一个编译错误,指出在第6行的上下文中,C::T是私有的。

现在将其更改为成员指针:

class C {
private:
   class T {int a, b;};
};

int C::T::*p;

这一次,gcc版本3.2.3仍然发出相同的警告,但是gcc版本3.4.3则让它通过了。根据标准,哪个是正确的行为?
2个回答

3

由于T除了类C本身以外的任何地方都是不可见的,我无法想象它会被允许。

我在Comau上尝试了这个方法,他告诉我相同的结果。可悲的是,我对标准的掌握程度不够,无法指引你去哪里。


3
为了补充xtofl的发言,请参阅标准的第11章([class.access]):
一个类的成员可以是:
- 私有的,即其名称只能由该类的成员和友元使用声明。

- 受保护的,即其名称只能由该类的成员和友元以及从该类派生的类的成员和友元使用(参见11.5)。

- 公共的,即其名称可以在任何地方使用而没有访问限制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接