调用链函数会产生开销吗?

Sal*_*ifa 5 c++ java performance method-chaining

调用函数链有开销吗?例如,在以下 for 循环中:

for(int i = 0; i < n; i++)
{
  var=object.method1().method2().method3();
}
Run Code Online (Sandbox Code Playgroud)

第一个效率是否比第二个低?

var = object.method1().method2();
for(int i = 0; i < n; i++)
{
  var.method3();
}
Run Code Online (Sandbox Code Playgroud)

我关心的是知道函数调用/返回是否有开销,而不是函数内部的功能。

谢谢。

Cap*_*ffe 3

您的两个片段在功能上并不等同。

您最初的问题被标记为 c++/Java,所以让我们继续吧。函数式语言可能会以不同的方式对待这一点。

一般来说,第二个版本更快,因为method1().method2()只需要调用一次。在 C++ 和 Java 中,编译器很难确定调用是否method1().method2()有任何副作用。例如,考虑一种接受用户输入的方法。

如果这些方法有副作用,编译器无法对var = object.m1().m2().m3().

链接本身不会产生任何开销。