inline函数

      先给出一到判断题:inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度,上面说法是否正确.答案是false。为什么呢?下面给出解释:

 

首先我们要明白内联函数提出的原因及意义。下面使用c++primer中文版第四版(P221)中的例子详细解释一下。
//定义了查找更短字符串的函数
 
1
2
3
4
const string &shortString( const string &s1, const string &s2)
{
return s1.size<s2.size()?s1:s2;
}
我们可以看到我们将查找更短字符串的操作定义了一个函数,这样做有很多的好处:
①更易于单身狗程序猿的理解;
②如果要修改,直接修改函数,不用修改所有的等价表达式,真是一本万利啊!
③使用函数确保每个调用实例能够统一;
④可以重复调用,代码重用,貌似和2一样啊;
你看,写成函数有这么多的好处,多好啊!但是,还是有缺点的:调用函数比直接用等价表达式要慢很多。调用等价表达式,直接编译代码一些列工作就行了。但是改成函数就不一样了,包括:调用前要先保存寄存器,并在返回时恢复;复制实参;程序还必须mov转到一个新的位置执行。你看,改成函数你好理解了,但是机器累到了。因此,就提出了内联函数,这样做就有好处:内联函数避免了函数调用的开销。将函数设置成内联函数就是将它在程序中的每个调用点上“内联”的展开。
cout<<shortString(s1,s2)<<endl;
那么编译是直接展开为:
cout<<( s1.size<s2.size()?s1:s2 )<<endl;
看起来不错,但是吧,编译器也很有脾气,内联函数对于编译器来说只是一个建议,编译器可以选择忽略,还是调用函数。你说它是不是很贱,不听老人言,非要吃力不讨好。貌似答案中提到,内联函数太长就忽略了。还有一点,内联函数需要在头文件中定义,这个跟一般的函数定义不同。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值