inline函数
来源:互联网 发布:修改路由器lan口mac 编辑:程序博客网 时间:2024/06/09 08:00
先给出一到判断题: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;
看起来不错,但是吧,编译器也很有脾气,内联函数对于编译器来说只是一个建议,编译器可以选择忽略,还是调用函数。你说它是不是很贱,不听老人言,非要吃力不讨好。貌似答案中提到,内联函数太长就忽略了。还有一点,内联函数需要在头文件中定义,这个跟一般的函数定义不同。
0 0
- Inline 函数
- Inline 函数
- inline函数
- inline 函数
- inline函数
- inline函数
- inline函数
- inline函数
- inline 函数
- inline函数
- inline函数
- inline函数
- inline函数
- inline 函数
- inline函数
- inline 函数
- inline函数
- inline函数
- 前端跨域的问题
- JVM创建对象
- Android应用程序管理系列(四)—— packagemanager flags 与 packageInfo
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- Flume+Kafka 将不同类别日志发往不同分区的三种方式的比较
- inline函数
- pcre3的源代码
- Mongodb 基于分布式文件存储的数据库
- 在myeclipse快捷生成setget方法
- spring整合jdbc;使用properties文件获取mysql数据库连接参数
- Hibernate_查询_HQL详解(三)_命名的查询、更新与删除的HQL语法
- java 消息机制 ActiveMQ入门实例
- 量化交易——传统技术分析随机震荡指标STO的原理及实现
- 375. Guess Number Higher or Lower II