1、概念
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内敛函数的地方展开代码。因为没有函数压栈的开销,所以内联函数可以提升程序运行的效率。
2、特性
(1)inline是一种以空间换时间的做法,省去调用函数开销。
(2) inline对于编译器而言只是一个建议,编译器会自动优化。如果定义为inline的函数体内有循环、递归,或者代码很长,编译器优化时会忽略掉内联的性质。
说明:一般将规模很小而且使用频繁的函数声明为内联函数。
3、使用方法
指定内联函数的方法很简单,只需要在函数首行的左边加一个关键字inline。
【例】
#include<iostream>
#include<stdlib.h>
using namespace std;
inline int Add(int left, int right)
{
return left + right;
}
int main()
{
cout << Add(10, 20) << endl;
system("pause");
return 0;
}
运行结果:
上面的程序中,Add函数就是内联函数。注意:可以在函数的声明和定义时同时加inline,也可以只在一处声明inline。
4、inline成员函数
类的成员函数也可以指定为内联函数。如果类的成员函数在类内定义,默认是内联函数。如果类的成员函数在类外定义,则需要加inline关键字显示的声明为内联函数。值得注意的是,如果在类外定义inline函数,则必须将类定义和成员函数的定义放到同一个头文件中,否则编译时无法将函数代码拷贝到函数的调用点。只有类外定义的成员函数的规模很小,而且调用频率很高时,才将此成员函数指定为内联函数。
5、面试题
(1)以空间换取时间的方式
1)索引;
2)哈希表;
3)内联函数;
(2)宏的优缺点
1)优点:
A、增强代码的复用性,方便修改;
B、宏只是进行简单的字符串替换,没有参数的入栈和出栈的开销,能有效提高性能。
2)缺点
A、不进行类型检查,不安全;
B、存在边界问题,容易产生二义性;
C、不能进行调试;
D、宏不支持递归;
(3)在C++中有哪些技术替换宏?
1)常量定义换用const;
2)函数定义换用内联函数;
3)类型重定义换用typedef