在头文件中定义所有库是不好的做法吗?

时间:2012-04-26 09:33:39

标签: c++ libraries

如果我有一段代码,说main.cpp需要myheader.h中定义的类,那么在main.cpp中包含myheader.h所需的所有库/标题是不好的做法{1}}档案?

如果是这样,为什么?考虑到main.cpp在没有myheader.h的情况下无效。

很抱歉,如果这个问题有点简单 - 我只是不确定分隔多个文件的常见做法。

2 个答案:

答案 0 :(得分:7)

通常,您应该只包含当前文件中所需的内容。好的,所以main.cpp仍然使用myheader.h,那么为什么不包括<iostream>以及myheader.h main.cpp所需的其他标题?因为明天您需要将myheader.h包含在myOthercpp.cpp <iostream>中,而不需要myheader.hmain.cpp中包含的其他标头,这是多余的并且会增加编译时间。因此,main.cpp中需要的内容包含在{{1}}中。

此模式有一个例外,称为precompiled headers

答案 1 :(得分:0)

有一些例外,但通常最好不在标题中包含标题。

编译速度

例如,如果你有一个很大的库biglibrary.cpp / biglibrary.h

依赖大型库做一些工作的类myclass.h / myclass.cpp

一些代码依赖于MyClass - main.cpp


main.cpp不依赖于biglibrary。它不需要了解它。它只取决于myclass.h。如果myclass.h包含biglibrary.h而不是编译main.cpp必须解析biglibrary.h以及减慢编译速度。

循环依赖

另一个问题是循环依赖。 假设您有2个A类,B类。参考B和B参考A

你是在b.h中包含a.h还是在a.h中包含b.h

更简洁的解决方案是在源文件中包含所需的标头。

如果标题中的代码需要引用不存在的类,请使用此处的前向减速:http://www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm