在c++中,inline用于升级c的宏定义define,他消除了define的缺点,又继承了define的优点。define宏定义,主要就是参数替换。所以,inline是可以(不一定会)进行编译期替换的。
在kotlin中,inline是对带函数参数的函数进行编译期优化,通过反编译,inline函数是把函数内容粘贴到调用处。
得出,都是在编译期的性能优化,都是通过替换,但是c++的inline是不一定的,kotlin的inline是一定的(实际上如果不带函数参数的函数,使用inline IDEA会提示没有必要)。
c++存在隐式的inline,kotlin必须显示声明,比如:
A.h:
class A {
private:
int d;
public:
int getD() const { return this->d; }
};
其中getD就是内联函数。
kotlin 因为函数式的原因,主要是配合lambda表示式,在kotlin中如果最后一个参数为函数调用是可以直接{ } ,也是通过inline,kotlin获得一些区别java的编码风格。比如,let源码:
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
另外kotlin 内联还有return循环体的特性。
c++推荐大量内联,虽然内联产生了代码膨胀,但是现在的硬盘内存都是是菜价。