C++:私有(private)嵌套类类型的公共(public)成员

标签 c++ inner-classes class-visibility

我有以下代码:

class Base
{
  private:
    class NestedBase
    {
      public:
        void Do() {}
    };

  public:
    NestedBase nested;
};

int main()
{
  Base b;
  b.nested.Do(); // line A compiles
  Base::NestedBase instance; // line B doesn't compile
}

NestedBase 类是 Base 的私有(private)嵌套类,因此 B 行不编译似乎很自然。但是,另一方面,变量 b 有公共(public)成员 nested,我可以从 外部调用它的方法 Do() >Base(如 A 行)。在这种情况下,规范对私有(private)嵌套类(或其成员)的访问的确切规则是什么?标准对此有何规定?

最佳答案

根据标准,$11.7/1 Nested classes [class.access.nest] :

A nested class is a member and as such has the same access rights as any other member.

所以,这很简单。 NestedBaseBase 类的 private 成员,所以 Base::NestedBase 不能在 中访问>主要()

b.nested.Do(); 很好,因为 nestedDo() 都是 public成员。 NestedBaseBaseprivate 嵌套类这一事实并不重要,与此无关。

关于C++:私有(private)嵌套类类型的公共(public)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965014/

相关文章:

C++:删除打印机队列

c++ - 互斥体上的条件断点未触发

java - 如何解决缺少包访问说明符的问题?

java - 默认情况下,Java 和 C++ 中的类是私有(private)的还是公有的?

java - 包保护类中的公共(public)方法是否有任何理由?

c++ - 澄清部分模板特化的歧义

c++ - 为什么 dlib 的神经网络 xml 导出包含与培训师指定的层不同的参数?

java - 添加内部标签会给字符串变量带来错误

Java - 外部类内部的内部类数组

Python - 在父类(super class)方法中创建类实例