美文网首页
C++中的inline function(内联函数)

C++中的inline function(内联函数)

作者: fck_13 | 来源:发表于2019-12-11 21:17 被阅读0次

    (1)inline有什么用?

    通常我们调用函数的时候,一般的流程为函数入栈,传入参数(如果有的话),出栈,再把返回值(如果有的话)给调用函数。
    将函数声明成inline后,当执行到该函数的时候,该函数会再执行点展开,你可以把这个过程想象成宏展开。这样就可以避免出栈入栈和传递参数返回值的操作。这是一种编译器的优化。

    (2)什么情况下函数可能是inline的?

    • 声明带有inline指示符的函数
    • 类的成员函数,如果其定义写在类内,即使没有加inline指示符,也是inline函数
    • constexpr函数被隐士的声明为inline函数
    • 所有函数,尤其是短函数,都有可能是inline函数(原因见(3))
    • 定义的非成员友元函数是inline的,即下面的friend_set
    class X {
        int a;
        friend void friend_set(X& p, int i) {
            p.a = i; // this is a non-member function
        }
     public:
        void member_set(int i) {
            a = i; // this is a member function
        }
    };
    

    (3)编译器如果对待inline函数?

    说到底,inline是编译器的一种优化策略,所以inline对编译器来说只是一种建议,编译器可以接受,也可以不接受。所以即便你对一个函数加了inline,编译器也可以把它当成普通函数。
    如果一个函数没有被声明为inline,而编译器觉得它可以inline,也会把它搞成inline函数。

    (4)什么情况下不能将函数声明为inline

    • virtual function(虚函数)。如果只用对象来调用虚函数,这时候虚函数是可以被inline的。因为此时编译器很明确的知道object的类型,该类也已经被实例化了。如果用引用或者指针来调用虚函数,那么这只能在运行时才能决定是什么类型,而inline是在编译期决定的。
    • 在块作用域内的函数不能被声明为inline

    (5)inline有什么缺点?

    • 会使可执行文件变得比较大
    • 很难debug inline的函数

    相关文章

      网友评论

          本文标题:C++中的inline function(内联函数)

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