=========================
显式的内联函数
=============================
在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。
下面我们来看一个例子:
#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,嗯,这个问题是要注意的,inline的使用是有所限制的,inline只适合函数体内代码简单的函数使用,不能包含复杂的结构控制语句例如while switch,并且不能内联函数本身不能是直接递归函数(自己内部还调用自己的函数)。
============================
隐式的内联函数
============================
在类定义中被定义的成员函数如下size() 会被自动当作是内联函数。
如下:
class IntArray
{
public:
// ...
int size() const { return _size; }
private:
// 内部数据
int _size;
};
在for 循环的条件子句中的size()调用:
for ( int index = 0; index < array.size(); ++index )
// ...
并没有真的被调用_size 次而是在编译期间被内联扩展为下面的一般形式
// array.size()的内联扩展
for ( int index = 0; index < array._size; ++index)
// ...
原文链接: https://www.cnblogs.com/JaneTang/archive/2010/02/08/1665887.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/8084
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!