前向声明一个类和声明一个类的变量有什么区别?

时间:2016-09-28 08:12:54

标签: c++ forward-declaration

假设我们有两个类Foo和Bar。 我们可以声明Foo类并使用其方法如下:

#include"foo.h"

Foo foo

class Bar{
    Bar(){
        foo.method1();
    }
}

我们有前向声明,它声明Foo类如下:

#include"foo.h"

class Foo

class Bar{
    Bar(){
    }
}

这两个声明之间的主要区别是什么,以及正向声明何时优先于正常声明?

1 个答案:

答案 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.

因此,在某些情况下,前向声明可以替换包含头文件。