c++ - C/C++ 头文件中的函数是不行的吗?

标签 c++ header coding-style project-structure

我正在处理一小段 C/C++ 源代码。该程序从 stdin 读取输入值,用算法处理它们并将结果写入 stdout。

我只想在一个文件中实现所有这些,但我还想要算法的测试用例(不是输入/输出读取),所以我的项目中有以下文件:

  • main.cpp
  • 排序.hpp
  • 排序测试.cpp

我直接在sort.hpp中实现了算法,没有sort.cpp。它相当短并且没有任何依赖性。

您是否会说,在某些情况下, header 中定义的函数是可以的,即使它们是复杂的算法而不仅仅是简单的访问器/修改器?或者我有理由避免这种情况吗?什么时候应该将代码从头文件移动到源文件?

最佳答案

只要您了解权衡,在头文件中使用函数并没有错。将它们放在头文件中意味着必须在包含头文件的任何翻译单元中编译(和重新编译)它们。 (并且它们必须被声明为内联,否则您将遇到链接器错误。)

在具有许多翻译单元的项目中,如果您经常这样做,编译时间可能会明显变慢。

另一方面,它确保函数定义在调用函数的任何地方都可见——这意味着它可以简单地内联,因此生成的程序可能运行得更快。

最后,对于函数模板,您通常别无选择。定义必须在调用站点可见,实现这一点的唯一实用方法是将其放在 header 中。

最后要考虑的是,只有 header 的库更易于部署和使用。您不需要链接任何东西,您不必担心 ABI 或其他任何东西。您只需将 header 添加到您的项目中,包括它们就可以了。

相当多的流行库使用仅 header 策略。

关于c++ - C/C++ 头文件中的函数是不行的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677226/

相关文章:

c++ - 定义模板 numeric_limits 的 limit.h 文件在哪里

c++ - 如何一次专门化多种类型的方法

实现文件中的 C++ Getters-Setter

c++ - 它是干净的代码吗?

coding-style - 帕斯卡案例边缘案例

c++ - C argv指针类型

c++ - 如果传递 long 类型,32 位客户端如何与 64 位服务器通信?

java - Android:在 ListView header 中设置文本

c - C 中结构和函数定义的导入错误

programming-languages - 关于如何编写函数的编程风格问题