声明:“必须在调用内联函数之前定义它们。”
这句话是否正确?
[编辑]
问题最初是德语:
Inline-Funktionen müssenvorihrem Aufruf definiert sein。
也许它可以帮助任何人......
答案 0 :(得分:5)
是的,它是正确的,但只是部分的。它可能正确地重新构图如下:
“内联函数必须在每个 translation unit 中定义(但不一定在之前)。”
C11 ++标准:§7.1.2.4
内联函数应在每个使用它的翻译单元中定义 在每种情况下都有完全相同的定义。[注意:在其定义出现在翻译单元之前,可能会遇到对内联函数的调用。 - 后注]
为什么会这样理由?
当你基本上声明一个函数时你正在告诉编译器(如果可能的话)用调用函数的任何地方用函数的内容替换调用函数的代码。这个想法是函数体可能很小,调用函数比函数本身的开销更大。
为了能够这样做,编译器需要在编译调用函数的代码时查看定义。通常,这是通过在带有inline
说明符的标头中添加函数的定义,然后在每个要调用函数的cpp文件中包含头文件来完成的。
答案 1 :(得分:0)
没有。 C++11 draft n3242比7.1.2第4小节中的早期规范更清楚;
内联函数应在每个翻译单元中定义 它使用得很多,并且在每种情况下都有完全相同的定义 (3.2)。 [注意:之前可能会遇到对内联函数的调用 它的定义出现在翻译单元中。 - 尾注]
答案 2 :(得分:-1)
该语句没有意义:不再调用内联函数,代码只是在当前函数中(它已被“内联”)。所以不,我会说这不正确。