内联函数/方法

时间:2012-03-24 16:23:38

标签: c++ inline-functions

声明:“必须在调用内联函数之前定义它们。”

这句话是否正确?

[编辑]

问题最初是德语:
  Inline-Funktionen müssenvorihrem Aufruf definiert sein。

也许它可以帮助任何人......

3 个答案:

答案 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)

该语句没有意义:不再调用内联函数,代码只是在当前函数中(它已被“内联”)。所以不,我会说这不正确。