Joe*_*ers 6 c++ inline function definition
我正在学习C++入门(第5版),虽然到目前为止它是非常好的材料,但我发现在某些情况下我会遇到令人头疼的解释,这些解释给我的问题多于答案.
在当前的例子中(强调我的粗体):
与其他函数不同,可以在程序中多次定义内联函数和constexpr函数.毕竟,编译器需要定义,而不仅仅是声明,以扩展代码.但是,给定内联或constexpr的所有定义必须完全匹配.因此,内联和constexpr函数通常在头文件中定义.
我已经对此做了一些研究,并且我已经看到许多答案,只要定义相同,我就可以多次定义内联函数.另外,我已经看到标准允许这样做.我很好奇的是:为什么?
是否存在可行的编码情况,我希望我的#include用于我想要的内联函数的给定头文件,只是在我的.cpp文件中提供重复的定义?我觉得我错过了这个规则适用的明显情况.为什么不这样做才能让你只能在标题,句点中定义一次内联函数,之后不用担心它?
祝一切顺利.
答案出人意料地简单:这样做是为了允许您在头文件中定义内联函数的主体。
由于头文件是逐字“粘贴”到引用它们的翻译单元内的,因此头文件内的任何函数定义最终都将位于该翻译单元内。如果您包含多个文件中的相同标头,则所有这些文件都将定义相同的函数,并具有相同的定义(因为它们来自相同的标头)。
由于预处理阶段是在编译之前完成的,因此编译器不知道翻译单元的哪一部分来自标头以及 cpp 文件中的哪一部分。这就是为什么标准编写者更容易允许多个相同的定义。