inline 内联函数的主要作用,在编译的时候不进行函数调用,编译器将内联函数的代码粘贴在调用处,目的是解决函数调用的效率问题,提高效率。
inline 关键字声明内联函数,C++中 inline 内联编译的限制:不能存在任何形式的循环语句;不能存在过多的条件判断语句;函数体不能过大;不能对函数进行取址操作;函数内联声明必须在调用语句之前。(针对以前的编译器)
如:
inline int func(int a, int b)
{
return a < b ? a : b;
}
注意:内联函数声明时,inline 关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。
#include <iostream> using namespace std; #define FUNC(a, b) ((a) < (b) ? (a) : (b)) inline int func(int a, int b) { return a < b ? a : b; } int main() { int a = 1; int b = 3; int c = func(++a, b); // 宏 int c = FUNC(++a, b); 等价于 int c = ((++a) < (b) ? (++a) : (b)); cout << "a = " << a << endl << "b = " << b << endl << "c = " << c << endl; }
输出结果:
a = 2
b = 3
c = 2
内联函数具有普通函数的特征(参数检查,返回类型等等);内联请求可能被编译器拒绝;函数被内联编译后,函数体直接扩展到调用的地方。
#include <iostream> using namespace std; inline int add_inline(int n); int main() { int r = add_inline(10); cout << "r = " << r << endl; } inline int add_inline(int n) { int ret = 0; for (int i = 0; i < n; i++) { ret += i; } return ret; }
输出结果:
r = 45