c++ - 不将 header 与实现分开是否仍然被认为是不好的做法?

标签 c++ c header

除了 C 和 C++ 之外,几乎所有语言都没有将 header 与实现分开。将函数/方法的实现放在头文件中,这样您就不需要将两者分开,这仍然被认为是一种不好的做法吗?

例子:

// File: myUtilLib.hpp

void myFunc1() {
  doSomething...
}

void myFunc2() {
  doSomething else...
}

而不是必须将所有声明复制/粘贴到单独的 .cpp 文件中?

最佳答案

只有 header 的库不被视为“坏”做法或“好”做法,它们是您作为作者必须考虑其优缺点的设计决策。多个库确实使用了 header-only 方法,并且它们在行业中广泛使用,例如 Boost。

这是通过在函数定义之前编写inline(或constexpr,隐式内联)关键字来覆盖声明的单一定义规则来完成的由于链接器错误,两个文件在编译期间不能包含相同的符号。这会导致“过度内联”,尽管 inline 关键字实际上并不强制内联。类及其方法也是隐式内联的(如果您在 header 中定义它们),因此不必将关键字放在它们上面。

只有 header 的方法有明显的缺点,最明显的是编译时间增加以及您有多个运行代码定义这一事实。然而,最简单的专业人士是,您可以直接打开页眉,这样会更容易为您和可能的用户进行设置。这是您必须自己做出的设计决定。

但是请注意,在某些情况下,只有 header 方法是唯一方法,这是关于模板代码的。有一个建议让 C++ 最终得到 modules这有望减轻构建系统的痛苦。然而,它还没有被完全接受,但它的进展似乎在重要性等级上很高。

关于c++ - 不将 header 与实现分开是否仍然被认为是不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17800083/

相关文章:

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - CUDA Thrust - 计算匹配子数组

C:有时会出现段错误?

C++ - 方法退出

c - 如何将字符串和整数添加到数组然后打印到文本文件

c - 确定对端是否已关闭套接字的读取端

html - 当我只为正文设置滚动时,标题没有与正文表对齐。还为 body 设置了滚动但它被禁用

php - 如何使用 content-disposition header 设置下载的 UTF-8 文件名?

vb.net - 如何通过 vb.net 在单词页眉/页脚中插入多个项目?

c++ - 为什么我的派生类找不到我的基类的类型别名?