关于内联函数
来源:互联网 发布:照片视频制作软件下载 编辑:程序博客网 时间:2024/05/22 17:29
百度百科的定义和动机
内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是否能形成内联函数,需要看编译器对该函数定义的具体处理。
内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。如果没有内联函数,编译器可以决定哪些函数内联 。 程序员很少或没有控制哪些职能是内联的,哪些不是。 给这种控制程度,作用是程序员可以选择内联的特定应用 。
我们要知道,如果要调用一个函数,那么它就要把寄存器和参数入栈,函数处理完后又要出栈,这需要占据一定的CPU处理时间,如果这个函数很短,那么就会不够effective,所以就有inline内联函数的出现,如果你把一个函数定义为内联函数,那么就相当于是#define ,当在程序编译中得时候就直接展开,就可以不用不用PUSH,不用POP,不用JUMP,可以节省很多CPU时间
具体例子 :最经典的 检查n个元素的所有排列方式
template<class T>
void Perm(T list[], int k, int m)
{ / /生成list [k:m ]的所有排列方式
int i;
if (k == m) {//输出一个排列方式
for (i = 0; i <= m; i++)
cout << list [i];
cout << endl;
}
else // list[k :m ]有多个排列方式
// 递归地产生这些排列方式
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}
template <class T>
inline void Swap(T& a, T& b)
{// 交换a和b
T temp = a; a = b; b = temp;
}
另外在CLASS中也可以使用内联函数
如
Class MyClass
{
public:
inline int GetState();
private:
int m_iState;
}
int inline MyClass::GetState()
{
return m_iState;
}
内联函数还有另外一种写法,就是直接写在类中,此时,不必使用“inline”关键字。
Class MyClass
{
public:
int GetState(){ return m_iState; }
private:
int m_iState;
}
- 关于内联函数读书笔记
- 关于内联函数inline
- 关于内联函数
- 关于内联函数
- 关于内联函数
- 关于内联函数
- 关于C++内联函数
- 关于内联函数inline
- 关于内联函数
- 关于C++内联函数
- 关于C++内联函数
- 关于内联函数的整理
- 关于内联函数的编译
- 关于C++中的内联函数
- 关于GetSafeHwnd()与内联函数
- 关于C++中的“内联函数”
- 关于c++的内联函数
- 关于内联函数的解释
- 2011年11月20日 敏捷之旅——深圳
- ADF中过滤数据的方法(三)
- 你若幸福,我就無悔。
- Lotus domino/design的公式秘籍
- 关于实现(大)系统的一些小体会
- 关于内联函数
- 页面设计中a标签内嵌套div标签的高度问题
- 12.3.1 用迭代器转换序列
- 1.6、适配器模式
- boost_1.47在VS2010下的安装
- VC 2010 发布
- 1.7、缺省适配器模式
- android入门
- Linux 下定时器的实现方式分析