为什么在C ++中明确表示“内联”

时间:2012-07-16 15:54:59

标签: c++ optimization inline

  

可能重复:
  When should I write the keyword 'inline' for a function/method?

所以这个问题已经困扰了我一段时间,我无法得到明确的答案。我的理解是,一个好的编译器通常会意识到什么时候对函数内联安全和有利,并且如果开启优化,它将内联所有这些函数,它们被明确地识别为内联函数。程序员与否。此外,编译器将识别何时对内联函数不安全/不敏感,并且在这种情况下将简单地忽略程序员对内联函数的请求。

因此,我想知道明确地将函数声明为内联的优点是什么?只要打开优化,编译器就会内联所有它认为合理的函数,并且只有那些函数。

由于嵌套的h文件,我发现了一些关于内联保护以防止多个定义的讨论,但肯定#ifdefine的头文件源代码是更好的做法,并再次使用关键字内联无效?

2 个答案:

答案 0 :(得分:15)

您可以了解编译器优化。你对inline的假设是错误的。尽管名称inline不是为了优化。 inline主要是“违反”one definition rule而不受惩罚。基本上,它告诉链接器许多翻译单元可以看到该定义,因此它不应该在多个翻译单元上找到它。

有些编译器可能会将其视为内联函数的提示,但这完全取决于编译器,完全有效,只需忽略该提示。

标题保护只能防止同一翻译单元上的多个定义。它们不适用于翻译单位。

答案 1 :(得分:8)

标头保护不能防止多个定义错误。

链接器遇到多个定义,并且当相同的定义包含在单独的编译单元中时会发生。