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