c++ - 为什么非模板类要在头文件和源文件中分开?

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

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

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

非常感谢!

最佳答案

Is that only code styling or does this approach avoid possible errors (e.g., linker errors)?

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

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

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


I'm wondering since in case of template classes, we are not even allowed to do the separation.

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

关于c++ - 为什么非模板类要在头文件和源文件中分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378118/

相关文章:

c++ - 如何将我的 AppDelegate 定义为它实例化的类的实例变量?

javascript - 如何在 Odoo 9 中执行 JS 文件中的函数?

c++ - 包含在许多翻译单元中时静态常量的开销?

javascript - 如何在水平滚动时将菜单和页脚保持在同一位置?

PHP Location Header 忽略哈希

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

c++ - 获取别名 std::array 的大小?

c++ - enable_if 迭代器作为默认模板参数?

c++ - 尝试一次读取一个字符的字符矩阵

c++ - 模板变量的默认返回值