调用内联函数C ++

时间:2009-06-27 09:30:06

标签: c++ inline-method

我有一个在MyClass类

下定义的内联成员函数
int MyClass::myInlineFunction();

从我的代码中的几个地方调用此函数 有两种方法可以调用此功能
案例1:每次调用函数时都使用它。

 mobj->myInlineFunction() ;

案例2:将此函数的结果分配给变量并将其用于后续访问

 var = mobj->myInlineFunction() ;

哪一个应该首选??

7 个答案:

答案 0 :(得分:3)

如果函数执行需要一些时间的事情,情况2可以为您提供很多性能。 如果

,请选择它
  • 你不需要发生这种功能的副作用
  • 该函数将始终在该上下文中返回相同的结果

答案 1 :(得分:1)

关于是保留返回值还是再次调用函数的决定不应该基于函数是否内联 - 因为这是一个可能在类的生命周期/演变中发生变化的实现细节。根据经验,我总是会挂在返回值上,如果它不会使代码太复杂,因为你不知道作为一个类的用户,这个函数的成本是多少 - 而且今天便宜的是什么明天很贵。所以我会选择案例2.

答案 2 :(得分:1)

即使性能不是问题,我也会使用案例2。如果您关心的只是此函数的结果,那么将其分配给变量可以让您以后轻松切换到另一种获取此结果的方法。

答案 3 :(得分:0)

我无法理解内联函数和将其分配给函数指针之间的关系。我理解。

但可以肯定的是,第一种方式是自我记录。

编辑:: 谢谢艾哈迈德,

实际上取决于其他方式而不能总是使用。

同样,至少第一种方式对我来说更清楚,如果两者都有效。

答案 4 :(得分:0)

如果函数为每次调用返回相同的结果,则必须使用案例2,因为即使它是内联函数,使用案例1也没有意义

答案 5 :(得分:0)

不幸的是,没有一个简单的答案,这取决于功能。

如果函数是微不足道的,那么{return 6; ,每次都要调用它。编译器将内联调用并删除代码。您应该发现将它分配给变量没有区别。

如果函数更复杂,则可能值得将其赋值给变量。整个计划的价值是否恒定?然后可以在类中添加一个包含值的静态成员?

答案 6 :(得分:0)

在不知道什么或通常最终会得到比原始代码更快的更复杂代码的情况下进行优化。

对我而言,确定使用哪种解决方案的标准并非基于您提供的信息。

  • 如果方法是一个访问器(只返回一个内部值,如在std :: vector<> :: size()中),则将其设为内联,不要缓存结果。
  • 如果该方法确实执行了大量工作,请不要使其内联并测量(您无法测量内联方法)调用它的次数,它代表的成本。然后决定缓存或内联是否合适。
  • 缓存结果(您的案例2)可能是对昂贵方法的改进,但前提是保证值不会在使用之间发生变化,在这种情况下,我不会使方法内联。
  • 如果对算法产生负面影响,则必须缓存结果(根据结果创建内存,然后使用具有相同结果的内存检查溢出,如果值发生更改,则会超出缓冲区)