内联函数
inline是C++语言中的一个关键字,可以用于程序中定义内联函数,inline的引进使内联函数的定义更加简单。引入内联函数的目的是为了解决程序中函数调用的效率问题。
内联函数是C++中的一种特殊函数,它可以像普通函数一样被调用,但是在调用时并不通过函数调用的机制而是通过将函数体直接插入调用处来实现的,这样可以大大减少由函数调用带来的开销,从而提高程序的运行效率。一般来说inline用于定义类的成员函数,用于类内定义时,可以省略inline。
内联函数示例
1.非类内内联函数
#include <iostream>
using namespace std;
inline int Max(int x, int y)
{
return (x > y)? x : y;
}
// 程序的主函数
int main( )
{
cout << "Max (20,10): " << Max(20,10) << endl;
cout << "Max (0,200): " << Max(0,200) << endl;
cout << "Max (100,1010): " << Max(100,1010) << endl;
return 0;
}
2.类内内联函数,可以省略inline,注意如果是类内声明,类外定义函数时,必须添加inline关键字
class temp{
public:
int amount;
//构造函数
temp(int amount){
this->amount = amount;
}
//普通成员函数,在类内定义时前面可以不加inline
void print_amount(){
cout << this-> amount;
}
}
内联函数总结
1、inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。也不是所有的内联函数都会如此提高效率,编译器会做判断,如果函数代码简单,就会采用以上的形式, 避免压栈、跳转、返回的额外开销;
2、如果函数包含了复杂的业务,那么即使定义为内联函数,编译器也还是按非内联函数处理;
3、在函数声明出加inline关键字定义为内联函数,并且在函数定义时也要加inline,否则编译器会直接忽略内联请求。
4、C++内联编译限制:
(1)不能存在任何形式的循环语句、判断语句
(2)函数体不能过于庞大
(3)不能对函数进行取址操作
(4)函数内联声明必须在调用语句之前
5、即使有上述限制,当函数体的执行开销远大于压栈、跳转和返回的开销时,那么内联将无意义。