【问题标题】:Why non-template classes should be separated in header and source files?为什么非模板类应该在头文件和源文件中分开?
【发布时间】:2017-11-19 14:42:50
【问题描述】:

有人可以帮我理解一下,为什么对于非模板类,建议将头文件和源文件中的代码分开?这只是代码样式还是这种方法可以避免可能的错误(例如,链接器错误)?

我想知道,因为对于模板类,我们甚至不允许进行分离。

提前非常感谢!

【问题讨论】:

标签: c++ templates header linker one-definition-rule


【解决方案1】:

这只是代码样式还是这种方法可以避免可能的错误(例如,链接器错误)?

主要用于减少编译阶段实现细节的相互依赖,从而降低整体编译时间。

如果您更改内联实现,所有看到它的翻译单元都需要重新编译。

在头文件中单独声明并且只引用非模板函数或类的函数接口(签名),如果内部实现发生变化,则不需要重新编译。


我想知道,因为在模板类的情况下,我们甚至不允许进行分离。

模板有点不同,因为类型参数被注入到定义中。这些不能在单独的翻译单元中实例化,除非在那里跟踪并实现所有可预见的类型特化。

【讨论】:

  • 谢谢。错误处理呢?是否存在需要在头文件和源文件中拆分类以避免错误(例如,链接器错误)的情况?
  • @abraham_hilbert 我不明白您对链接器错误的担忧吗?您可以随时内联所有内容。您只需要在链接时注意多个定义的冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-09
相关资源
最近更新 更多