许多帖子非常坚定地认为源代码不应该放在标题中,并且头文件应该保持在最低限度。我一直坚持使用我自己的代码,但我想使用其他人的代码来实现特定的目标(代码记录在这里http://ftp.arl.mil/random/)。
我注意到这基本上是一个定义类的巨型头文件。将它保留在头文件中可以吗?我应该将它全部复制到.cpp文件并创建一个只声明函数,结构等的新的.h吗?
如果我按照我的建议把它分成.cpp和.h,它会起作用吗?或者类需要在标题中才能被所有源代码访问?
答案 0 :(得分:7)
需要在多个cpp文件中看到的声明(声明存在某些内容)应该放在头文件中。单个cpp文件本地的声明应该在cpp文件本身中。
定义(提供函数体或分配/初始化变量)通常应该使用cpp文件,但并非总是如此。
您需要了解的问题是编译器是否有足够的信息来完成其工作,如果它已经看到头文件而不是相应的cpp文件。
例如:如果编译器已经看到声明(方法原型),你可以调用一个方法 - 除非该方法是通用的(模板化方法或模板化类的成员)或内联,在这种情况下编译器需要也看过了定义(方法体)。
因此普通方法进入cpp文件;模板化方法进入头文件;内联方法进入头文件(等等)。
还有其他情况,其中定义属于头文件,包括静态成员常量。这一切都回到给编译器一方面需要的信息,另一方面最小化单独的可编译单元之间的耦合。同样,没有严格的规则,只是指导程序与编写代码的开发人员的知识和经验相结合。
答案 1 :(得分:6)
.h文件通常在许多.cpp文件之间共享。 全局变量和函数代码不应该在头文件中,因为它会在链接期间产生重复。
常量,定义,函数头和类声明在头文件中都很好。您不必多次声明相同的内容,并且可以在.cpp文件之间共享定义。
答案 2 :(得分:4)
源代码不应该放在标题中,而且标题文件应该是 保持在最低限度。
这是一个流行的断言,虽然它通常不是坏建议,但你不应该从中得出绝对的结论。 有时标题应该是最小的,不包括定义。有时情况恰恰相反。你有理由去做其中一个,但“人们说”不是其中之一。
考虑C ++标准库。更好的是,考虑一下Boost。一些着名的C ++专家表示,Boost是历史上设计最精良的C ++库。但是如果你看看这些库,你会发现它们基本上只是巨大的头文件。这如何与“他们”所说的相协调?
重点在于:您必须了解某些文件按原样设计的原因,并对每种情况的正确和错误做出自己的想法。
我应该将它全部复制到.cpp文件并创建一个新的.h 声明函数,结构等?
我想说可能不是。这听起来像是对我来说维护噩梦的秘诀。这是我第一次使用第三方库的本能,就像图书馆作者所希望的那样。这样你就不会离开支持网格,并且你不会引入一系列新的复杂功能,你将完全靠自己来弄清楚。除非你有一个特定的,可证明的理由来改变图书馆的架构,否则不要。 “他们说”对我来说不够好。