假设我们有两个类Foo和Bar。 我们可以声明Foo类并使用其方法如下:
#include"foo.h"
Foo foo
class Bar{
Bar(){
foo.method1();
}
}
我们有前向声明,它声明Foo类如下:
#include"foo.h"
class Foo
class Bar{
Bar(){
}
}
这两个声明之间的主要区别是什么,以及正向声明何时优先于正常声明?
答案 0 :(得分:1)
在第二种情况下,您不需要
#include"foo.h"
在前向声明中你只是说编译器“某处有Foo类。但我不知道它看起来如何”。所以编译器可以引用它们但不能使用它们;
class Foo; //Forward declaration.
Foo* foo; // ok. Just pointer.
Foo foo;// error. Compiler can't instantiate object.
和
#include "foo.h"
Foo* foo; // ok. Just pointer.
Foo foo;// ok. Compiler can instantiate object.
因此,在某些情况下,前向声明可以替换包含头文件。