【发布时间】:2020-08-31 22:36:12
【问题描述】:
来自learncpp.com 的关于是否在头文件中实现函数的引用:
- 对于仅在一个文件中使用且通常不可重用的类,请直接在使用它们的单个 .cpp 文件中定义它们。
- 对于在多个文件中使用的类,或用于一般重用的类,请将它们定义在与类同名的 .h 文件中。
- 可以在类内部定义普通成员函数(普通构造函数或析构函数、访问函数等)。
- 重要的成员函数应在与类同名的 .cpp 文件中定义。
假设我遵循#3 的建议,并在my_class.h 文件中实现了一些小方法my_class::f,但我将更大的方法留在my_class.cpp 中实现。如果我在同一个项目的两个不同的.cpp 文件中包含my_class.h,那么链接器将看到my_class::f 的两个(相同的)定义。 (这不是由标头保护解决的。)我知道一些链接器足够聪明,可以容忍这种情况(尽管我听说它可能会花费额外的时间)。我的问题是:
您认为他们推荐#3 是因为在一个项目中两次包含相同的 .h 文件是不常见的,还是因为可以依赖链接器来忽略重复的定义,并且这样做不会浪费太多时间?
【问题讨论】:
-
你需要使函数
inline避免重定义。 -
推荐对 C++ 头文件使用
.hpp或.hxx。这将区分 C 语言头文件.h和 C++ 头文件。 C 编译器无法编译 C++ 头文件。
标签: c++ linker header-files one-definition-rule