返回但不使用该类型的 C++ 函数是否需要 #include 该类型?
Does a C++ function that returns, but doesn't use, a type need to #include that type?
这个文件需要一个#include
来定义FooType
吗?函数的类型签名返回FooType*
,但函数实现不使用FooType
。
// test.cpp
class FooType; // Unresolved forward declaration
FooType* GetFoo() { return nullptr; }
使用g++ --std=c++11 -Wall
构建时没有警告。那么,这是向前声明的合法用法吗?
From cppreference:
下列形式的声明
声明一个类类型稍后将在本范围中定义。在定义出现之前,这个类名称类型不完整。
…
,如果一个特定的源文件只使用指针和引用类,这使得减少#include依赖成为可能。
所以这个语法是完全有效的,因为你使用了一个指针Foo*
。
相关文章:
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 检查函数返回类型是否与STL容器类型值相同
- 检查某些类型是否是模板类 std::optional 的实例化
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 如何检查模板类型是否可以从给定类型构造
- 用于检测函数类型是否为否的特征
- 了解类型是否可调用
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 键入特征以检查类型是否可从流和 MSVC 读取
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 如何获取类型是否真正可移动可构造
- 在编译时检查类型是否为 std::basic_string<T> C++
- 在C++中,转换为simd类型是否有未定义的行为
- POD类型是否完全等同于琐碎的标准布局类型
- 聚合类型是否意味着它也是标准布局
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 验证(使用 static_assert)元组类型是否遵循某种顺序(有状态编译时检查)
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- 特征:从数组类型中获取标量类型是否记录?