在C ++中,我可以在其范围之外定义私有类的指针成员吗?

时间:2009-01-07 15:29:27

标签: c++ pointers

考虑:

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

C::T *p;

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

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

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

int C::T::*p;

这一次,gcc版本3.2.3仍然提出同样的抱怨,但gcc版本3.4.3允许它通过。根据标准,这是正确的行为?

2 个答案:

答案 0 :(得分:3)

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

在Comau身上试过这个,他告诉我同样的事情。可悲的是,我不太了解我的标准,所以不能指出你。

答案 1 :(得分:3)

要添加到 xtofl 的帖子,请参阅标准的第11章([class.access]):

  

班级成员可以是

   - 私人;也就是说,它的名称只能由其所在类的成员和朋友使用   声明。

   - 受保护;也就是说,它的名称只能由其所在类的成员和朋友使用   声明,并由本课程的成员和朋友宣布(见11.5)。

   - 公开;也就是说,它的名称可以在没有访问限制的任何地方使用。