欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++之inline函数

程序员文章站 2022-03-16 08:52:55
...

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 test
1111deMacBook-Pro:inline a1111$ ./test
result is 10