内联函数知多少?

    技术2026-06-07  10

    到底啥是内联(inline)函数?为什么内联函数效率比较高呢?

    要想解决上述问题,就必须先来说说普通的函数调用是怎样的流程.在大多数机器上,一次函数调用其实包含着一系列工作:1.调用前先保存寄存器,并在返回时恢复;2.可能需要拷贝实参;3.程序转向一个新的位置继续执行等等.这些无疑都是函数调用时的开销,而内联函数则可以避免函数调用产生的这些开销,因此它的效率比较高.

    内联函数是怎么避免函数调用时的开销呢?举一个例子:

    const string& shorterString( const string& str1, const string& str2 ){ return str1.size() <= str2.size() ? str1 : str2; }

    这是一个普通的函数,而定义成内联函数之后,则如下调用

    cout << shorerString( s1, s2 ) << endl;

    将在编译过程中展开成类似于下面的形式

    cout << (s1.size() <= s2.size() ? s1 : s2) << endl;

    从而消除了shorterString函数的运行时开销.

    在函数的返回类型前加上关键词inline,这样就可以将它声明成内联函数了.

    值得注意的是,内联说明只是向编译器发出的一个请求,编译器可以选择忽略这个请求.至于编译器到底同意内联请求还是忽略,我们也不知道.一般来说,简短的函数声明为inline时,编译器大概率会同意内联请求;而对于复杂函数,编译器一般会忽略.

    Processed: 0.023, SQL: 9