C++ inline
2015-11-20 22:23
423 查看
C++ inline函数
上面是求两个数中较大者的函数,当然我们可以在任意使用big(a, b)的位置用如下这句话代替:(a > b ? a : b).
把这种小操作定义为函数的优缺点如下:
优点:
1. 阅读和理解函数的调用比读懂等价的表达式容易。
2. 使用函数可以确保行为的统一,每次相关操作都能保证按照同样的方式进行。
3. 修改函数比修改所有位置的等价表达式更容易。
4. 函数可以被其他应用重复利用,省去了编码的代价。
缺点:
1. 调用函数比求等价的表达式慢。
函数调用包含一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。
内联函数可避免函数调用的开销
将函数指定为内联,通常就是将它在每个调用“内联地”展开。假设吧big函数定
义为inline,则如下调用
cout << big(a, b) << endl;
在编译过程中展开成类似于下面的形式
cout << (a > b ? a : b) << endl;
1、内联函数对于编译器来说只是一个建议,编译器可以选择忽略这个建议。
2、内联函数应该在头文件中定义,这一点不同于其他函数。
3、在头文件中加入或者修改内联函数时,使用了该头文件的所有源文件都必须重新编译。
4、内联函数的定义对编译器而言必须是可见的,以便编译器能够在调用点内联展开该函数的代码。
5、为了使得inline声明内联函数有效,我们必须将inline关键字与函数体放在一起才行,否则inline关键字是不能成功将函数声明内联函数的。
更多:https://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0
int big(int a, int b) { return a > b ? a : b; }
上面是求两个数中较大者的函数,当然我们可以在任意使用big(a, b)的位置用如下这句话代替:(a > b ? a : b).
把这种小操作定义为函数的优缺点如下:
优点:
1. 阅读和理解函数的调用比读懂等价的表达式容易。
2. 使用函数可以确保行为的统一,每次相关操作都能保证按照同样的方式进行。
3. 修改函数比修改所有位置的等价表达式更容易。
4. 函数可以被其他应用重复利用,省去了编码的代价。
缺点:
1. 调用函数比求等价的表达式慢。
函数调用包含一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。
内联函数可避免函数调用的开销
将函数指定为内联,通常就是将它在每个调用“内联地”展开。假设吧big函数定
义为inline,则如下调用
cout << big(a, b) << endl;
在编译过程中展开成类似于下面的形式
cout << (a > b ? a : b) << endl;
1、内联函数对于编译器来说只是一个建议,编译器可以选择忽略这个建议。
2、内联函数应该在头文件中定义,这一点不同于其他函数。
3、在头文件中加入或者修改内联函数时,使用了该头文件的所有源文件都必须重新编译。
4、内联函数的定义对编译器而言必须是可见的,以便编译器能够在调用点内联展开该函数的代码。
5、为了使得inline声明内联函数有效,我们必须将inline关键字与函数体放在一起才行,否则inline关键字是不能成功将函数声明内联函数的。
更多:https://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0
相关文章推荐
- 《c语言从入门到精通》看书笔记——第3章 数据类型
- 字符串趣味输出
- 《c语言从入门到精通》看书笔记——第2章 算法
- 《算法竞赛入门经典2ndEdition 》--Chapter 2 习题解答(Page 34-35)
- 《C++ primer》英文第五版阅读笔记(十四)——算术运算符
- C++设计模式::装饰模式or代理模式or面向切片编程(AOP)
- effective c++ 避免返回handles指向对象内部成分(1)
- C++字符串格式化文章
- 【笔试题】C语言:模拟实现strncat
- 【笔试题】C语言:模拟实现strncmp
- 深入理解C/C++内存对齐
- QtCreator支持C++11的设置方法
- C语言常用的字符串函数
- c++builder Active Form
- 浅谈C语言的存储区
- C++语法杂谈
- C++ 08工厂方法模式
- C语言判断括号个数是否相等
- C++中int型与string型互相转换
- C++ 01简单工厂模式