在header或cpp中包含std库?

时间:2011-10-11 22:17:28

标签: c++ header-files

如果我有一个使用iostream的A类,我应该把iostream的include语句放在A.h还是A.cpp中?

5 个答案:

答案 0 :(得分:25)

这是一个有争议的领域。我自己的偏好是每个标题应该能够独立,所以如果它需要其他标题,它包括它们。换句话说,如果客户端代码无论如何都需要包含<iostream>(或其他),那么您的标题应该为它们处理。 OTOH,如果iostream的用户被严格隐藏,因此客户端代码根本不需要包含它,那么它应该只包含在实现文件中。

在许多情况下(特别是标题对频繁更改开放的情况),您宁愿避免将其包含在标题中。在这种情况下,PImpl习惯用法可以帮助从头中获取依赖性。

如果您确实需要加入<iostream>,请帮助您的客户,并考虑是否可以#include <iosfwd>而不是<iostream>。这可以大大改善编译时间。

答案 1 :(得分:3)

将其包含在需要的地方。如果你在类的声明中使用<iostream>中定义的东西(比如成员变量,成员函数参数或返回类型等),那么它应该在H文件中。如果您只在实施中使用它 - 那么在CPP中。

答案 2 :(得分:2)

将其包含在cpp中。这样它就不会包含在可能包含你的A.h但不需要iostream的其他cpp文件中。除非由于某种原因,你的头文件中有一些东西需要iostream。但如果是这样的话,你可能会做错其他的事情......

答案 3 :(得分:1)

取决于。

如果你使用头文件中的类,你需要在头文件中(显然)。

如果您只使用类声明,则可以使用不完整的类型。在这种情况下,请在头文件中加<iosfwd>,在cpp

中加<iostream>

答案 4 :(得分:0)

在需要的地方使用它。

如果您的类声明引用标题中的类型,则需要将其包含在那里。如果它只在实现中,那么您可以将它包含在cpp文件中。

相关问题