我开始知道在高阶函数中内联的好处,例如:
inline fun adder(x:Int,y:Int,(Int,Int)->Int){ // do something }
在这种情况下,编译器实际上在运行时在adder()函数的调用位置复制代码。这会带来更好的性能。但是内联对于常规函数很有用,例如::
inline fun sum(x:Int,y:Int):Int { }
在求和函数中使用内联有什么好处吗
hvvq6cgz1#
这在documentation中有简短的提及,它说:如果内联函数没有可内联的函数参数,也没有具体化的类型参数,编译器将发出警告,因为内联这样的函数不太可能是有益的。编译器在将普通函数标记为内联时产生的警告如下(源代码):内联的预期性能影响并不显著。内联最适用于带有函数类型参数的函数。然而,有一些建议认为应该删除或减弱此警告,因为内联函数可能因其他原因而有用。例如,有一个开放的问题https://youtrack.jetbrains.com/issue/KT-16769,它提出了使函数内联的几个可能的原因。例如,如果你只是想用不同的名字引用一个内联函数或者细化它的类型签名,那么它可以被用作另一个函数的“别名”。
1条答案
按热度按时间hvvq6cgz1#
这在documentation中有简短的提及,它说:
如果内联函数没有可内联的函数参数,也没有具体化的类型参数,编译器将发出警告,因为内联这样的函数不太可能是有益的。
编译器在将普通函数标记为内联时产生的警告如下(源代码):
内联的预期性能影响并不显著。内联最适用于带有函数类型参数的函数。
然而,有一些建议认为应该删除或减弱此警告,因为内联函数可能因其他原因而有用。
例如,有一个开放的问题https://youtrack.jetbrains.com/issue/KT-16769,它提出了使函数内联的几个可能的原因。例如,如果你只是想用不同的名字引用一个内联函数或者细化它的类型签名,那么它可以被用作另一个函数的“别名”。