在头文件或cpp中包含std库
Include std library in header or cpp?
如果我有一个使用iostream的类a,我应该把iostream的include语句放在A.h或A.cpp中吗?
这是一个有争议的领域。我自己的偏好是每个头应该能够独立,所以如果它需要其他头,它包括它们。换句话说,如果客户端代码无论如何都需要包括<iostream>
(或其他),您的头应该为他们处理。如果iostream的用户是严格隐藏的,所以客户端代码根本不需要包含它,那么它应该只包含在实现文件中。
在很多情况下(特别是在头文件经常被修改的情况下),你最好避免在头文件中包含它。在这种情况下,PImpl习惯用法可以用于从头文件中获取依赖项。
如果您确实需要包含<iostream>
,请帮您的客户一个忙,并考虑是否可以使用#include <iosfwd>
而不是<iostream>
。
在需要的地方包含它。如果您在类的声明中使用<iostream>
中定义的东西(如成员变量,成员函数参数或返回类型等),那么它应该在H文件中。如果您只在实现中使用它-那么在CPP中。
包含在cpp中。这样,它就不会潜在地包含在其他可能包含A.h但不需要iostream的cpp文件中。当然,除非出于某种原因,你的头文件中有东西需要iostream。但如果是这样的话,你可能做错了什么…
在需要的地方使用
如果你的类声明在头文件中引用了类型,你需要在头文件中包含它。如果它只是在实现中,那么您可以将它包含在cpp文件中。
看情况。
如果你在头文件中使用类,你需要在头文件中(显然)。
如果只使用类声明,则可以使用不完整类型。在这种情况下,在头文件中包含<iosfwd>
,在cpp
<iostream>
。
相关文章:
- 为什么std::copyable包含std::moveable
- 包含 std::list 的结构体的 C++ 初始化
- C++如何乘以包含 std::variant 元素的向量的迭代器?正在执行迭代器类型的转换?
- 包含 std::threads 的元素向量
- std::包含 std::函数回调的多个包装器的向量不起作用
- 检查 std::any 变量是否包含 std::string 时出现问题
- 安装 GCC 7.1 是否会在标准库中包含 std::is_base_of_v
- C++ 中的 NAPI 本机模块正在部分执行(包含 std::thread)
- 包含 std::string 常量的类
- 即使在包含 std 命名空间之后,fstream 在 Visual Studio 2017 中也无法正常工作
- 如何重用包含 std::ifstream 的类
- 提升序列化:SIGABRT 同时反序列化包含 std::shared_ptr 的对象上的 boost::shared_p
- 传统C 代码不包含std ::前缀
- 如何在(C )构造函数参数列表中包含std:列表
- 从C++文件中读取包含 std::vector 的对象
- 在头文件中包含std::vector会导致模板实例化错误
- 是否有一个包含std::unique_ptr的c++标准库实现可以与visualstudio2008一起使用
- 包含 std::forward 会产生错误,但其省略会编译.为什么
- 包含std ::队列的类的价值限制
- 为什么结构make_unique在包含 std::p romise 作为成员时失败?