2

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

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

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

如果不是,是否更好地使用.hpp?我听说a.hpp是为此而生的。

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

4

5 回答 5

3

是的。它可能会创建更大的可执行文件,这是因为在类本身中定义的成员函数inline 默认情况下,无论您是否在定义中提到关键字inline。通常,inline函数会导致更大的可执行文件,因为无论从哪里调用它,编译器都会多次定义它。

于 2012-04-14T17:43:39.613 回答
2

.h 与 .hpp 是 90% 的等价物

#include <cmath> vs  #include <math.h>

有些人更喜欢.hpp在进行独家 C++ 编程时使用。你会.hpp在像Boost.

但是,另外 10% 非常重要。例如,取自Boost图书馆文档,他们解释了使用.hppover的原因.h

大多数 Boost 库都是仅头文件:它们完全由包含模板和内联函数的头文件组成,并且在链接时不需要单独编译的库二进制文件或特殊处理。

如果您遇到这种情况,您应该使用.hpp,但这可能会花费更长的编译时间。否则,您可能想要保持.h风格。这只是我个人的口味。完全不是C-oriented,在我的诚实意见中。

进一步阅读:

将模板化的 C++ 类拆分为 .hpp/.cpp 文件——这可能吗?

将声明和实现压缩到 HPP 文件中

C++ 模板在 .h 中声明,在 .hpp 中定义

于 2012-04-14T17:50:21.687 回答
0

这里有你需要的一切:头文件,将所有代码放入其中的利弊。希望能帮助到你!

使用头文件可以缩短编译时间并减少可执行文件。它看起来也相当干净,因为您可以通过查看它的 .h 声明来快速了解您的类。

于 2012-04-14T17:42:38.793 回答
0

你没有什么可担心的。它的分解方式绝对没有区别,是您的文件描述的内容使它变大,而不是该描述的展开方式。

.h 或 .hpp 也没有区别。

于 2012-04-14T17:42:48.243 回答
0

要回答有关更大可执行文件的问题,是的,它会使您的可执行文件更大。当您在源文件或头文件中#include 头文件时,预处理器会将#include 替换为头文件的内容。这就是为什么有必要使用以下标头保护来保护您的头文件:

#ifndef HDR_H
#define HDR_H

...

#endif

但是,如果将头文件(具有函数定义)包含在属于同一可执行文件的多个文件中,则会出现链接器错误。您最好将类和函数定义和声明分别拆分为 .cpp 和 .hpp 文件。这将大大减少链接器头痛的数量。

此外,.h = .hpp。不管你选择哪一个。个人喜好...

于 2012-04-14T18:11:29.990 回答