此文件是否需要#include
来定义FooType
?函数的类型签名返回FooType*
但函数实现不使用FooType
。
// test.cpp
class FooType; // Unresolved forward declaration
FooType* GetFoo() { return nullptr; }
使用g++ --std=c++11 -Wall
构建时没有警告。这是对前瞻性声明的合法使用吗?
答案 0 :(得分:2)
来自cppreference:
以下表格的声明
class-key attr identifier;
声明一个类型 在此范围的后面定义。直到定义出现,这个类 名称不完整。
...
并且如果特定源文件仅使用指针和引用 这个类可以减少#include依赖。
因此,此语法完全有效,因为您使用指针Foo*
。