我对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 ++方面的经验很少),所以我很想知道这是否会在将来导致某种错误或不可预测的行为。
答案 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 { };
E
和I1
对应Outer
和Inner
。