C++ Primer中的陌生概念一:内联函数
来源:互联网 发布:现在做网络推广好做吗 编辑:程序博客网 时间:2024/05/22 23:42
第213页介绍了内联函数:
我们编写了一个小函数:
const string &shorterString(const string &s1, const string &s2)
{
Return s1.size() <= s2.size() ? s1 : s2;
}
它的功能是比较两个string形参的长度并返回长度较小的string的引用。把这种规模较小的操作定义成函数有很多好处,主要包括:
1.阅读和理解shorterString函数的调用要比读懂等价的条件表达式容易得多。
2.使用函数可以确保行为的统一,每次相关操作都能保证按照同样的方式进行。
3.如果我们需要修改计算过程,显然修改函数要比先找到等价表达式所有出现的地方再逐一修改更容易。
4.函数可以被其他应用重复利用,省去了程序员重新编写的代价。
然而,使用shorterString函数也存在一个潜在的缺点:调用函数一般比求等价表达式的值要慢一些。在大多数机器上,一次函数调用其实包含着一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。
内联函数可避免函数调用的开销
将函数指定为内联函数(inline),通常就是将它在每个调用点上“内联地”展开。假设我们把shorterString函数定义成内联函数,则如下调用:
cout << shorterString(s1, s2) << endl;
将在编译过程中展开成类似于下面的形式:
cout << s1.size() <= s2.size() ? s1 : s2 << endl;
我试着使用了一下inline修饰符,但编译时出现unresolved external symbol未定义的错误。在网上搜索了一下答案,是因为,内联函数应该在头文件中定义,这一点不同于其他函数。编译器在调用点内联展开函数的代码时,必须能够找到linline函数的定义才能将调用函数替换为函数代码,而对于在头文件中仅有函数声明是不够的。
另外,在类内定义的成员函数全部默认是内联函数,可以显式加上inline修饰符,也可以不加。但是内联是给编译器的一种提示,编译器有权选择是不是内联。
- C++ Primer中的陌生概念一:内联函数
- C++ Primer中的陌生概念二:default默认构造函数
- C++ Primer中的陌生概念五:map的insert函数
- C++ Primer中的陌生概念三:vector的初始化问题
- C++ Primer中的陌生概念四:范围for语句
- C Primer Plus学习 五十四 内联函数
- C中的内联函数行为
- C中的内联函数行为
- c语言中的的内联(inline)函数
- c语言中的的内联(inline)函数
- C语言中的内联函数(总结)
- c语言中的的内联(inline)函数
- c语言中的的内联(inline)函数
- 【C++】 C++中的内联函数inline总结
- c语言中的的内联(inline)函数
- c/c++中的inline(内联函数)
- c语言中的内联函数用法解析
- 内联函数在C语言中的作用
- 在linux字体下的显示问题及几种解决办法
- android 6.0权限全面详细分析和解决方案
- 十年工龄的程序员为你揭示最危害程序员职业生涯的三大观念
- Linux平台总线驱动设备模型
- activeMQ 例子(一) 简单的p2p(point to point)模式
- C++ Primer中的陌生概念一:内联函数
- hadoop集群搭建2.7.3
- Spring 学习之错误收集及解决方案
- Linux的I/0模型
- RDD持久化原理与共享变量
- mongo查看当前进程及更改字段类型命令
- 360浏览器的极速模式和兼容模式的区别
- web需要知道的基础知识链接
- 传统的diaolog使用方法