我知道我能做到
class Foo;
并且可能
struct Bar;
和全局函数
bool IsValid(int iVal);
那么类型化的枚举呢?未声明的类中的类型化枚举呢?带有未声明类的函数呢?未声明的类中的静态成员呢?这些在未知命名空间中的情况如何?我是否遗漏了其他可以提前声明的内容?
我知道我能做到
class Foo;
并且可能
struct Bar;
和全局函数
bool IsValid(int iVal);
那么类型化的枚举呢?未声明的类中的类型化枚举呢?带有未声明类的函数呢?未声明的类中的静态成员呢?这些在未知命名空间中的情况如何?我是否遗漏了其他可以提前声明的内容?
您可以转发声明
如果通过“前向声明”您严格的意思是“声明但不定义”,您也可以前向声明成员函数。但是一旦声明它们,您就不能在它们的类定义中重新声明它们。您不能前向声明枚举。我不确定我是否错过了什么。
请注意,上面列出的所有前向声明(部分和显式特化除外)都需要使用非限定名称声明,并且成员函数和嵌套类只能在其类定义中声明但未定义。
class A { };
class A::B; // not legal
namespace A { }
void A::f(); // not legal
namespace A { void f(); } // legal
class B { class C; }; // legal
class B::C; // declaration-only not legal
class D { template<typename T> class E; };
template<typename T> class D::E<T*>; // legal (c.f. 14.5.4/6)