2016-09-30 77 views
0

该文件是否需要利用#include来定义FooType?函数的类型签名返回FooType*,但函数实现不使用FooType返回但不使用类型的C++函数是否需要#include该类型?

// test.cpp 
class FooType; // Unresolved forward declaration 

FooType* GetFoo() { return nullptr; } 

它使用g++ --std=c++11 -Wall生成没有警告。那么这是对前向声明的合法使用吗?

+1

是的这是合法的。 – drescherjm

+0

@HAG:同意,子弹点“*定义接受/返回指针/引用不完整类型(但不使用其成员)的函数或方法:”回答我的确切问题。 – mgiuffrida

+0

@mgiuffrida正确:)! – HazemGomaa

回答

2

cppreference

以下形式的声明

类密钥ATTR标识符;

声明将在本范围稍后定义的 的类类型。在定义出现之前,此类 名称具有不完整类型。

...

,如果一个特定的源文件只使用指针和引用 类,这使得它可以减少的#include依赖。

所以这个语法是完全有效的,因为你使用了一个指针Foo*