如果我有一个使用iostream的A类,我应该把iostream的include语句放在A.h还是A.cpp中?
答案 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文件中。