程序员都知道,普通的函数被调用时有压栈弹栈的操作,同时伴随着指令跳转。这都消耗着时间和资源。如果函数本身规模很小,则这种消耗就占用了很大的比例。为解决这种问题,引入了inline函数。
注意,C++中的inline函数的链接性是内部的,这意味着函数定义必须放在使用函数的文件中。
对于内联函数在头文件中,因此在使用函数的文件中包含头文件可以确保将定义放在正确的地方。
对于将函数定义放在.cpp实现文件中,这种情况下,必须删除关键字inline,这样才能保证函数的链接性是外部的。
想要使用inline函数,下面两条至少要采取一条:
在函数声明前加上inline;
在函数定义前加上inline;
#include <iostream>
#include <cstdlib>
using std::cout;
using std::endl;
inline bool isOdd(int iNum); //函数原形声明为inline即:内联函数
int main() {
for(int i=1; i<=10; i++) {
cout << i << " is " << (isOdd(i)?"Odd":"Even") << endl;
}
std::system("pause");
return 0;
}
//无需再次inline,当然加上inline也OK
bool isOdd(int iNum) {
return (0 == iNum%2)?false:true;
}
inline函数完全避免了函数调用时的压栈弹栈操作,提高了运行速度。
但,当函数本身过大或者存在递归调用时,即使声明为inline函数,编译器也不会满足你的要求。
能用inline千万别用#define,不信的话,可以传一个 ++iNum 实参试一下。
Done!