以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。
对于内联函数有以下建议:
1.所以内联函数是一种以空间换时间的操作,因此我们可以想象到在一些带有递归,循环,或者代码很长的情况下不适合使用内联函数。
2.inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等 等,编译器优化时会忽略掉内联。
3. inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。
第三点的解释:在一个工程中如果内联函数的声明和定义分别放在不同的文件中,程序可能无法调用函数,因此会出现链接错误。因为内联函数是直接展开,并不会保留地址让计算机去寻找,所以会导致编译器无法找到函数的地址,也就无法使用
内联函数也要注意代码膨胀
代码膨胀举例说明就是如果一个函数有几十行代码,我们可能会选择使用内联函数去节省时间,但是如果这个函数在整个程序中会被使用上百次甚至上千次,那么使用内联函数会占用大量空间。
inline也分为隐式和显式
隐式即是定义在类里面,显式直接在函数名前加
所以在调用内联函数的时候,最好是函数内包含少量代码,且没有递归或循环等代码行。