内联定义和声明

21 c++ inline

在最近的同行评审期间,另一位软件工程师建议我声明该inline函数inline在定义中(在类之外)以及声明中(在类的内部).他的论点是" 通过内联标记,你说这个方法的执行速度比非内联方法快得多,并且调用者不必担心对方法的过度调用. "

真的吗?如果我是一个类的用户,我真的关心对该方法的过度调用吗?在定义和声明中将其列为内联是否有任何问题?在C++ FAQ指出:

最佳实践:仅限于类体外的定义.

那么谁在这里?

Joh*_*itb 14

这听起来像是两件完全无关的事情.把inline在两个班里的声明外的不需要类的定义.把它放在其中一个声明就足够了.

如果你谈到inline.cpp那里定义函数的文件中添加,并且该函数是public成员,那么你不应该这样做.调用inline函数的人必须能够看到他们的定义.C++标准要求.

  • @0A0D 不,这不是我的建议。正如我所暗示的,如果您调用“内联”函数,则该函数的定义需要对编译器可见(它需要在调用的翻译单元中定义)。将其放入标头中,在类定义之内或之外,然后您可以显式地将其标记为“内联”(如果将其放在类定义之外的标头中,则实际上必须这样做)。尽管在类定义中定义函数时放置“内联”是多余的。 (3认同)
  • 所以你的建议是将内联放在标题中,而不是在Cpp文件中,如果它是公开的?就我而言,它是公开的. (2认同)

Lig*_*ica 9

通过内联标记,您可以说这种方法的执行速度比非内联方法快得多,而且调用者不必担心过多的方法调用.

那是胡说八道.标记函数inline并不能保证函数实际上是内联的; 即使它是,也不能保证你的功能会"更快".

通过标记定义inline和声明,你只是假装你的用户对任何东西都有任何保证,而不是......

如果我是一个类的用户,我真的关心对该方法的过度调用吗?

并不是的.

实际上,实际上,您应该编写的唯一时间inline是由于某种原因需要强制内联存储时(无论是否发生内联,使用关键字始终会影响单定义规则对您的函数的应用...虽然要求这是罕见); 否则,让编译器决定内联哪些函数,然后继续.这样做的必然结果是,您无需担心使用关键字来假装它正在记录任何内容.

  • @ 0A0D:您的编译器知道这一点.如果您的用户发现自己关心功能是否因性能原因而内联,那么他们编程错误.:) (2认同)
  • 这个答案对我来说似乎可能令人困惑。“将函数标记为内联并不能保证该函数实际上会被物理内联”,但是“唯一应该编写内联的时间是当您需要强制内联存储时”。我认为它应该解释“内联存储”和“物理内联”之间的区别,而不是表面上的矛盾。 (2认同)