0

我在 MyClass 类下定义了一个内联成员函数

int MyClass::myInlineFunction();

这个函数是从我的代码中的几个地方调用的。
调用这个函数有两种方法
案例一:每次调用函数时都使用this。

mobj->myInlineFunction() ;

案例2:将此函数的结果赋值给一个变量,并用于后续访问

var = mobj->myInlineFunction() ;

应该首选哪一个??

4

7 回答 7

3

如果函数执行需要一些时间的操作,案例 2 可以为您提供很多性能。如果选择它

  • 您不需要该功能的副作用发生
  • 该函数将始终在该上下文中返回相同的结果
于 2009-06-27T09:37:00.680 回答
1

关于是否保留返回值或再次调用函数的决定不应基于函数是否内联 - 因为这是一个实现细节,可能会随着类的生命周期/演变而改变。根据经验,如果它不会使代码过于复杂,我将始终坚持返回值,因为您不知道作为一个类的用户,函数的成本是多少 - 今天便宜的可能是明天贵。所以我会选择案例2。

于 2009-06-27T09:39:03.780 回答
1

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

于 2009-06-27T10:54:19.323 回答
0

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

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

编辑 :: 谢谢艾哈迈德,

它实际上取决于并且不能总是使用一种方式来代替另一种方式。

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

于 2009-06-27T09:39:25.387 回答
0

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

于 2009-06-27T09:42:33.820 回答
0

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

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

如果函数更复杂,则可能值得将其分配给变量。整个程序中的值是否恒定?然后可能会在类中添加一个包含该值的静态成员?

于 2009-06-27T10:52:07.703 回答
0

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

对我来说,确定使用哪种解决方案的标准不是基于您提供的信息。

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