C++之inline函数

来源:互联网 发布:linux cern 知乎 编辑:程序博客网 时间:2024/06/04 19:56

1、为什么需要inline

C中的宏没有调用,参数压栈、返回操作所以比函数快,但是有参数副作用,inline为了取代这种表达式形式的宏定义,它消除了宏定义的缺点,同时又很好地继承了宏定义的优点。





2、inline如何使用以及特点

1)、inline一般写在C++函数定义的前面,一般主要是长度不长经常调用的函数,比如
inline void f(){   /**   **/}
2)、inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高
3)、类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性
4)、使用inline函数完全取代表达式形式的宏定义,内联函数一般只会用在函数内容非常简单的时候,这是因为,内联函数的代码会在任何调用它的地方展开,如果函数太复杂,代码膨胀带来的恶果很可能会大于效率的提高带来的益处。内联函数最重要的使用地方是用于类的存取函数。




3、测试Demo

#include <iostream>using namespace std;class Account{public:    Account(int value);    Account(){}    int doubleValue();private:    int val;};Account::Account(int value){    val = value;}inline int Account::doubleValue(){    return val * 2;}int main(){    Account account = Account(5);    int result = account.doubleValue();    std::cout << "result is " << result <<std::endl;    return 0;}

用命令编译
g++ -g test.cpp -o test
然后我们再去执行test文件
./test





4、运行结果

1111deMacBook-Pro:inline a1111$ vim test.cpp 1111deMacBook-Pro:inline a1111$ g++ -g test.cpp -o test1111deMacBook-Pro:inline a1111$ ./testresult is 10