5.inline 作用及使用方法-灵析社区

菜鸟码转

inline 是一个关键字,可以用于定义内联函数。内联函数,像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是直接在调用点处展开,这样可以大大减少由函数调用带来的开销,从而提高程序的运行效率。在内联函数出现之前,在 C/C++ 的大型工程中常见用 #define 定义一些“函数”来消除调用这些函数的开销。内联函数设计的目的之一,就是取代 #define 的这项功能。由于使用 #define 定义的“函数”,编译器不会检查其参数的正确性等,而使用 inline 定义的函数,可以指定参数类型,则会被编译器校验)。内联函数可以在头文件中被定义,并被多个 .cpp 文件 include,而不会有重定义错误。这也是设计内联函数的主要目的之一。

  • 使用方法:类内定义成员函数默认是内联函数,除了虚函数以外,因为虚函数是在运行时决定的,在编译时还无法确定虚函数的实际调用。

在类内定义成员函数,可以不用在函数头部加 inline 关键字,因为编译器会自动将类内定义的函数(构造函数、析构函数、普通成员函数等)声明为内联函数,代码如下:

C++

#include <iostream>
using namespace std;

class A{
public:
    int var;
    A(int tmp){ 
      var = tmp;
    }
    void fun(){ 
        cout << var << endl;
    }
};

int main()
{    
    return 0;
}
  • 类外定义成员函数,若想定义为内联函数,需用关键字声明

当在类内声明函数,在类外定义函数时,如果想将该函数定义为内联函数,则可以在类内声明时不加 inline 关键字,而在类外定义函数时加上 inline 关键字。关键字 inline 必须与函数定义体放在一起才能使函数成为内联,如果只是 inline 放在函数声明前面不起任何作用。

C++

#include <iostream>
using namespace std;

class A{
public:
    int var;
    A(int tmp){ 
      var = tmp;
    }
    void fun();
};

inline void A::fun(){
    cout << var << endl;
}

int main()
{    
    return 0;
}


阅读量:2008

点赞量:0

收藏量:0