我们在.h
中定义了一个C ++类,并在.cpp
中定义了它的方法,但它使代码看起来不那么有条理。
我想将所有方法的定义放在.h
文件中的类定义中,但我担心编译器在包含一个类头文件时为相同的方法/函数生成重复的代码不同的文件。
链接器是否找出并合并重复的代码段以减小文件大小?
如果没有,是否更好地使用.hpp
?我听说.hpp
就是这个。
当我为.h
更改.hpp
文件(我不知道为什么),用G ++编译时,确实会产生细微差别。
答案 0 :(得分:3)
是。 可能创建更大的可执行文件,这是因为在类本身中定义的成员函数默认为inline
,无论您是否提及关键字{{ 1}}在定义与否。通常,inline
函数会导致更大的可执行文件,因为无论在何处调用它,编译器都会多次定义它。
答案 1 :(得分:2)
.h vs .hpp是
的90%等值#include <cmath> vs #include <math.h>
有些人在进行独占C ++编程时更喜欢使用.hpp
。您会在.hpp
等库中看到Boost
。
然而,其他10%非常重要。例如,从Boost
库文档中获取,他们解释了使用.hpp
而不是.h
的原因:
大多数Boost库只是标题:它们完全由标题组成 包含模板和内联函数的文件,并且不需要 单独编译的库二进制文件或特殊处理时 联。
如果你遇到这种情况,你应该使用.hpp
,但这可能会花费更长的编译时间。否则,您可能希望保持.h
样式。这只是我的个人品味。在我的诚实意见中,它根本不是C-oriented
。
进一步阅读:
Splitting templated C++ classes into .hpp/.cpp files--is it possible?
答案 2 :(得分:0)
你需要的只是here: Header files, pros and cons of putting all you code in them。希望能帮助到你!
使用头文件可以缩短编译时间并缩小可执行文件。它看起来也相当清晰,因为你可以通过查看它的.h声明来快速了解你的课程。
答案 3 :(得分:0)
你无需担心。它如何分解完全没有区别,这就是你的文件描述使它更大,而不是如何分散这些描述。
.h或.hpp也没有区别。
答案 4 :(得分:0)
要回答有关较大可执行文件的问题,是的,它会使您的可执行文件更大。当您#include源文件或头文件中的头文件时,预处理器会将#include替换为头文件的内容。这就是为什么有必要使用以下标头保护来保护您的头文件:
#ifndef HDR_H
#define HDR_H
...
#endif
但是,如果将头文件(具有函数定义)包含在属于同一可执行文件的多个文件中,则会出现链接器错误。将类和函数定义和声明分别分解为.cpp和.hpp文件是明智的。这将大大减少连接器头痛的数量。
另外,.h = .hpp。无论你选择哪一个都没关系。个人喜好......