美文网首页
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