c++ - 为什么内联函数会有多个相同的定义?

标签 c++ function inline definition

我正在学习 C++ 入门(第 5 版),虽然到目前为止它确实是很棒的 Material ,但我发现在某些情况下我会遇到令人头疼的解释,这些解释给我的问题多于答案。

在当前示例中(用粗体强调我的):

Unlike other functions, inline and constexpr functions may be defined multiple times in the program. After all, the compiler needs the definition, not just the declaration, in order to expand the code. However, all of the definitions of a given inline or constexpr must match exactly. As a result, inline and constexpr functions normally are defined in headers.

我对此做了一些研究,并且看到了很多答案,我可以多次定义一个内联函数只要定义相同。此外,我已经看到标准允许这样做。我很好奇的是:为什么?

是否存在一种可行的编码情况,我可以为我想要的内联函数在给定的头文件中使用 #include,只是为了在我的 .cpp 文件中提供重复的定义?我觉得我错过了适用此规则的明显情况。为什么不直接做,这样您就可以在标题、句点中只定义一次内联函数,之后就不用担心了?

祝一切顺利

最佳答案

答案非常简单:这样做是为了允许您在头文件 中定义内联函数体。

由于头文件是在引用它们的翻译单元中逐字“粘贴”的,因此头文件中的任何函数定义最终都会在该翻译单元中。如果您包含来自多个文件的相同 header ,则所有这些文件都将定义相同的函数,具有相同的定义(因为它们来自相同的 header )。

由于预处理阶段是在编译之前完成的,编译器不知道翻译单元的哪一部分来自 header ,而哪一部分在您的 cpp 文件中。这就是标准编写者更容易允许多个相同定义的原因。

关于c++ - 为什么内联函数会有多个相同的定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173083/

相关文章:

c++ - 模板函数+仿函数参数,为什么仿函数没有内联?

c++ - 内联函数时出现链接器错误

python - Windows 上的 boost python 在导入 ("__main__"时崩溃);

android - 在 Android 上运行自己的 TensorFlow 模型会出现 native 推理错误 : "Session was not created with a graph before Run()!"

javascript - jQuery 插件函数覆盖

javascript - 在javascript中对天数进行排序

html - Chrome 不显示内联图片

c++ - 清除 ptr_array

c++ - 无法让 std::ignore 在范围内的结构化绑定(bind)中工作

matlab - matlab中如何控制返回变量