C ++中的类中的前向声明

时间:2015-07-27 17:47:33

标签: c++ c++11

我对C ++中的前向声明有疑问

class Outer::Inner; // not valid. error
class Outer {
    Inner * inn; // not valid, needs forward declaration.
    class Inner {
    }
}

但是当这样实施时:

// class Outer::Inner; // not valid. error
class Outer {
    class Inner; // forward-"like" declaration within class
    Inner * inn;
    class Inner {
    }
}

编译确定。但我之前从未见过这样的实现(因为我在C ++方面的经验很少),所以我很想知道这是否会在将来导致某种错误或不可预测的行为。

1 个答案:

答案 0 :(得分:2)

它有效。标准说:

  

9.7嵌套类声明 [class.nest]

     

如果在命名空间作用域中定义了类X,则可能是嵌套类Y   在类X中声明,稍后在类X的定义中定义   (...)。

以下示例也是:

class E {
  class I1; // forward declaration of nested class
  class I2;
  class I1 { }; // definition of nested class
  };
class E::I2 { };

来源:C++11 draft n3242

您的问题中

EI1对应OuterInner