(1) 什么是内联函数?
函数的函数体放在类体内。
(2)为什么要引入内联函数?
函数的代码被放入符号表中,在使用时(像宏一样展开)取消了函数的参数压栈,减少了调用的开销。
(3)内联函数和宏的区别?
宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。
(4)什么时候用内联函数?
一般用来定义读写函数。读写私有或受保护的成员数据。读写函数改写成内联函数提高执行效率。
Class A
{
Private:
int nTest;
Public:
int readtest() { return nTest;}
void settest(int I) { nTest=I; }
}
(5)如何使用内联函数?
任何在类体内定义的函数都会被自动的认为是内联函数。
我们可以用inline来定义内联函数。
inline int A (int x) { return 2*x; }
(6)注意事项:
1.在内联函数内不允许用循环语句和开关语句switch。
2.内联函数的定义必须出现在内联函数第一次被调用之前。
Example:
#include <iostream>
#include <string>
using namespace std;
inline string dbtest(int a); //函数原形声明为inline即:内联函数
void main()
{
for (int i=1;i<=10;i++)
{
cout << i << ":" << dbtest(i) << endl;
}
cin.get();
}
string dbtest(int a)//这里不用再次inline,当然加上inline也是不会出错的
{
return (a%2>0)?"奇":"偶";
}
使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部所有调用dbtest(i)的地方都替换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数。
在c语言中广泛被使用的#define语句,但是define是会产生副作用的,尤其是不同类型参数所导致的错误,在c++中是不推荐使用define的。