第二章 面向对象的编程风格(声明inline函数)

2.5声明Inline函数        //完整程序还未打出难过

 

独立化程序:


之前的fibon_seq()返回fibonacci数列元素,其位置由用户而定。在最初的版本中,每次调用,它都会重新计算每一个数列元素,直到用户指定的元素为止。它也会检测用户所指的位置是否合理。我们可以将各个小工作分解成独立函数,以求简单化:
bool is_size_ok(int size)
{
 const int max_size=1024;
 if(size<=0||size>max_size)
{
  cerr<<"oops:requested size is not supported:"
<<size<<"--cant fulfill request.\n";
 return false;
}
return ture;
}
//计算fibonacci数列中的size个数
//并返回持有这些函数的静态容器的地址
const int max_size=1024;
static vector<int>elems;
if(!is_size_ok(size))
return o;
for(int ix=elems.size();ix<size;++ix)
{
 if(ix==0||ix==1)
elems.push_back(1)
else elems.push_back(elems[ix-1]+elems[ix-2]);
}
return &elems;
}
//返回fibonacci数列中位置为pos的元素
//我们必须将该位置做减1调整,因为第一个元素位于位置0
//如果程序无法支持上述元素,便返回false
bool fibon_elem(int pos,int &elem)
{
 const vector<int>*pseq=fibon_seq(pos);
 if(!pseq)
 {
  elem=0;
  return false;
}
elem=(*pseq)[pos-1];
return true;
}


inline函数的作用

将有效位置的检验操作抽取为is_size_ok(),再将计算fibonacci数列的程序抽取为fibon_seq(),从此fibon_elem()的实现变得更加单纯理解。这个函数也可以为其他应用函数所利用。但是,先前的函数fibon_elem()只需要调用一个函数便完成人所有运算,如今必须要使用三个函数,这是它的缺点。这负担是否很重要呢?这跟当时的情形有关。如果执行力不够,就需要将三个函数重新组合成为一个。然而c++还提供了另一个解决方法就是将这些函数声明为inline函数,编译器可以再每个函数的调用点上,将函数的内容展开。面对一个inline函数,编译器可以将函数的调用操作改成以一份代码副本代替。这将使我们获得性能改善,其结果等于是把三个函数写入fibon_elem()内,但依然维持三个独立的运算单元。

inline函数的声明:

只要在函数的前面加上关键字inline,便可以将函数定义为inline。

//OK,现在fibon_elem()成了inline函数
inline bool fibon_elem(int pos,int &elem)
将函数定义为inline,只是对编译器提出的一种要求。编译器是否具有执行能力,需视编译器而定。一般而言,最适合声明为Inline函数,和fibon_elem()以及is_size_ok()一样:体积小,常被调用,所从事的计算不复杂。

inline的定义常常被放在头文件中,编译器必须在它被调用的时候展开,所以这个时候的定义必须是有效的。

 

完整程序:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值