OOP C++中内联函数的正确方法

Proper way to inline function in OOP C++

本文关键字:方法 函数 C++ OOP      更新时间:2023-10-16

我有一个简单的等式,在整个代码中需要调用大约100次。我试图将函数开销保持在最低限度,但仍然使用OOP概念(这对我来说是新的)。这个方程式只是计算两个差值的最大值的一个简单方程式。它就像3行。我应该使用内联函数吗?如果是这样,通常接受的使用方法是什么(即,我应该创建一个单独的.h文件,将其放在基类中(使用此函数的所有对象都是间接派生的)。

除非编译器具有良好的链接时间优化功能(并且已启用),否则必须在头文件中声明和定义要内联的整个函数。至于将.h文件专门用于内联函数,或者将其放在类层次结构的何处,即使您将其余的代码和/或设计提供给我们,我们也无法告诉您。这实际上更像是一种风格选择,而不是关于唯一正确方法的预定义规则

EDIT:为了澄清:如果您的内联函数只在单个源(.cpp)文件中使用,那么您可以在与static inline相同的文件中声明它。如果您希望多个源文件可以访问它,请将它放在头文件中。

是的,如果inline函数成员不是virtual,则可以使用它们。但是在每个使用这个内联函数的文件中都应该有它的定义,所以把这个函数的实现放在*.h文件中是个好主意。如果它是虚拟的,则不能根据标准使用内联(尽管gcc允许)。

但在任何情况下,标准都不能保证内联函数——即使您将其标记为inline

我不会把这样的函数放在类中,除非它需要使用类的一些状态,或者有充分的理由将其使用限制在该类层次结构中。

在.h中的命名空间中使用内联函数听起来是一个不错的方法。通过将其放在命名空间中,您可以使用公共名称max,而不用担心它在全局命名空间中,然后您可以在那里收集适合该域的任何函数。

尽管如果它只是一个max函数,那么仅仅使用std::max函数可能是一个不错的选择?

一般来说,如果可能的话,最好是重复使用。它节省了时间并降低了维护成本。每个人几乎都知道std::max是什么,但其他一些max需要一些时间才能弄清楚。