在头文件或cpp中包含std库

Include std library in header or cpp?

本文关键字:包含 std cpp 文件      更新时间:2023-10-16

如果我有一个使用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>