内联定义和声明

时间:2012-02-13 21:48:01

标签: c++ inline

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

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

  

最佳实践:仅限于课堂体外的定义。

那么谁在这里?

2 个答案:

答案 0 :(得分:13)

这听起来像两个完全不相关的东西。将inline放在类中的声明和类外的定义中是不需要的。把它放在其中一个声明就足够了。

如果您谈到在inline文件中添加.cpp并在其中定义了某个功能,并且该功能是public成员,那么您应该那样做。调用inline函数的人必须能够看到他们的定义。 C ++标准要求。

答案 1 :(得分:9)

  

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

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

通过标记定义inline以及声明,你只是假装你的用户对任何东西都有任何保证而没有任何保证而让人感到困惑......

  

如果我是一个班级的用户,我真的关心过多的方法调用吗?

不是。

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