0

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

4

3 回答 3

2

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

编辑:澄清一下:如果您的内联函数仅用于单个源(.cpp)文件,您可以在与 .cpp 相同的文件中声明它static inline。如果您希望多个源文件可以访问它,请将其放在头文件中。

于 2013-07-12T20:29:02.727 回答
1

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

但在任何情况下,标准都不能保证内联您的功能 - 即使您将其标记为inline.

于 2013-07-12T20:26:55.860 回答
1

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

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

虽然如果它只是一个 max 函数,也许只使用std::max 函数是一个不错的选择?

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

于 2013-07-12T20:35:51.787 回答