美文网首页
内联函数知多少?

内联函数知多少?

作者: guanghaolv | 来源:发表于2020-07-05 00:08 被阅读0次

    到底啥是内联(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时,编译器大概率会同意内联请求;而对于复杂函数,编译器一般会忽略.

    相关文章

      网友评论

          本文标题:内联函数知多少?

          本文链接:https://www.haomeiwen.com/subject/gtkmqktx.html