将整个类定义放在“.h”中会使可执行文件更大吗?

时间:2012-04-14 17:39:01

标签: c++ compilation header-files

我们在.h中定义了一个C ++类,并在.cpp中定义了它的方法,但它使代码看起来不那么有条理。

我想将所有方法的定义放在.h文件中的类定义中,但我担心编译器在包含一个类头文件时为相同的方法/函数生成重复的代码不同的文件。

链接器是否找出并合并重复的代码段以减小文件大小?

如果没有,是否更好地使用.hpp?我听说.hpp就是这个。

当我为.h更改.hpp文件(我不知道为什么),用G ++编译时,确实会产生细微差别。

5 个答案:

答案 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?

Condensing Declaration and Implementation into an HPP file

C++ templates declare in .h, define in .hpp

答案 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。无论你选择哪一个都没关系。个人喜好......