如果我有一段代码,说main.cpp
需要myheader.h
中定义的类,那么在main.cpp
中包含myheader.h
所需的所有库/标题是不好的做法{1}}档案?
如果是这样,为什么?考虑到main.cpp
在没有myheader.h
的情况下无效。
很抱歉,如果这个问题有点简单 - 我只是不确定分隔多个文件的常见做法。
答案 0 :(得分:7)
通常,您应该只包含当前文件中所需的内容。好的,所以main.cpp
仍然使用myheader.h
,那么为什么不包括<iostream>
以及myheader.h
main.cpp
所需的其他标题?因为明天您需要将myheader.h
包含在myOthercpp.cpp
<iostream>
中,而不需要myheader.h
或main.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