我们在 a 中定义了一个 C++ 类,并在 a 中.h
定义了它的方法.cpp
,但这会使代码看起来不那么有条理。
我想将所有方法的定义放在.h
文件中的类定义中,但我担心当一个类头文件包含在不同的文件中时,编译器会为相同的方法/函数生成重复的代码。
链接器是否找出并合并重复的代码片段以减小文件大小?
如果不是,是否更好地使用.hpp
?我听说a.hpp
是为此而生的。
当我只是将.h
文件更改为.hpp
用 G++ 编译的(我不知道为什么)时,它确实会产生细微的差别。
我们在 a 中定义了一个 C++ 类,并在 a 中.h
定义了它的方法.cpp
,但这会使代码看起来不那么有条理。
我想将所有方法的定义放在.h
文件中的类定义中,但我担心当一个类头文件包含在不同的文件中时,编译器会为相同的方法/函数生成重复的代码。
链接器是否找出并合并重复的代码片段以减小文件大小?
如果不是,是否更好地使用.hpp
?我听说a.hpp
是为此而生的。
当我只是将.h
文件更改为.hpp
用 G++ 编译的(我不知道为什么)时,它确实会产生细微的差别。
是的。它可能会创建更大的可执行文件,这是因为在类本身中定义的成员函数inline
默认情况下,无论您是否在定义中提到关键字inline
。通常,inline
函数会导致更大的可执行文件,因为无论从哪里调用它,编译器都会多次定义它。
.h 与 .hpp 是 90% 的等价物
#include <cmath> vs #include <math.h>
有些人更喜欢.hpp
在进行独家 C++ 编程时使用。你会.hpp
在像Boost
.
但是,另外 10% 非常重要。例如,取自Boost
图书馆文档,他们解释了使用.hpp
over的原因.h
:
大多数 Boost 库都是仅头文件:它们完全由包含模板和内联函数的头文件组成,并且在链接时不需要单独编译的库二进制文件或特殊处理。
如果您遇到这种情况,您应该使用.hpp
,但这可能会花费更长的编译时间。否则,您可能想要保持.h
风格。这只是我个人的口味。完全不是C-oriented
,在我的诚实意见中。
进一步阅读:
这里有你需要的一切:头文件,将所有代码放入其中的利弊。希望能帮助到你!
使用头文件可以缩短编译时间并减少可执行文件。它看起来也相当干净,因为您可以通过查看它的 .h 声明来快速了解您的类。
你没有什么可担心的。它的分解方式绝对没有区别,是您的文件描述的内容使它变大,而不是该描述的展开方式。
.h 或 .hpp 也没有区别。
要回答有关更大可执行文件的问题,是的,它会使您的可执行文件更大。当您在源文件或头文件中#include 头文件时,预处理器会将#include 替换为头文件的内容。这就是为什么有必要使用以下标头保护来保护您的头文件:
#ifndef HDR_H
#define HDR_H
...
#endif
但是,如果将头文件(具有函数定义)包含在属于同一可执行文件的多个文件中,则会出现链接器错误。您最好将类和函数定义和声明分别拆分为 .cpp 和 .hpp 文件。这将大大减少链接器头痛的数量。
此外,.h = .hpp。不管你选择哪一个。个人喜好...