C++之内联函数
来源:互联网 发布:notepad js格式化插件 编辑:程序博客网 时间:2024/06/05 19:13
一、目的
提高程序运行速度所做的一项改进。
二、内联函数与常规函数的区别
编译过程的最终产品是程序——由一组机器语言指令组成。运行程序时操作系统将这些指令载入到计算机内存中,因此每条指令都有特有的内存地址。计算机随后逐步执行这些命令。
执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(位次保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还要将返回值放入到寄存器中),然后跳回到地址保存的指令处。来回跳跃并记录跳跃位置意味着以前使用函数时,需要一定的开销。
C++内联函数提供另一种选择。内联函数的编译代码与其他程序代码“内联”起来了。也就是说,编译器将使用相应的函数代码替换函数调用。对于内联代码,程序无需跳到另一个位置处执行代码,再跳回来。因此,内联函数运行比常规函数快,但需要占用更多的内存。所以应选择性的使用内连函数。执行函数代码时间比处理函数调用时间长,则节省时间占整个过程的很小一部分。如果执行代码时间短,则内联调用则可以节约大部分时间。但由于这个过程非常快,尽管节约了大部分时间,但时间的绝对值并不大,除非该函数经常被调用。
节省时间但是消耗空间。
三、使用
在函数声明前加上关键字inline;
在函数定义前加上关键字inline;
(以上采取之一即可)
四、inline函数的规则
(1)、一个函数可以自已调用自已,称为递归调用,含有递归调用的函数不能设置为inline;
(2)、使用了复杂流程控制语句:循环语句和switch语句,无法设置为inline;
(3)、由于inline增加体积的特性,所以建议inline函数内的代码应很短小。最好不超过5行。
(4)、inline仅做为一种“请求”,特定的情况下,编译器将不理会inline关键字,而强制让函数成为普通函数。出现这种情况,编译器会给出警告消息。
(5)、在你调用一个内联函数之前,这个函数一定要在之前有声明或已定义为inline,如果在前面声明为普通函数,而在调用代码后面才定义为一个inline函数,程序可以通过编译,但该函数没有实现inline。
#include<iostream>using namespace std;inline double square(double x){ return x*x;}int main(){ double a,b; double c = 13.0; a = square(5.0); b = square(4.5 + 7.5); cout<<"a = "<< a <<" , "<<"b = "<< b <<endl; cout<<"c = "<< c; cout<<", c square = "<< square(c++) <<endl; cout<<"New c = "<< c <<endl; return 0;}
该函数输出:
a = 25, b = 144;
c = 13, c square = 169;
New c = 14;
输出表明,内联函数和常规函数一样都是按值传递。
五、内联与宏
如果以上用宏:
#define square(x) x*x;
则程序输出:New c = 15
表明宏不是按值传递。
- 【C++】:C++之内联函数(inline)
- 函数之内联函数
- C语言内联函数
- C++:内联函数
- C 内联函数
- c++-inline 内联函数
- C语言内联函数
- C++_inline内联函数
- 【C++】内联函数,inline
- C++---函数内联
- C 内联函数
- [C++]内联函数
- c/c++内联函数
- C++_内联函数
- c++inline内联函数
- C++:内联函数
- 【C++】内联函数
- 【每日一C之十三】C 语言inline内联函数
- Oracle生成不重复字符串 sys_guid()
- boost::bind的使用方法
- 如何学习高并发
- shell--数组
- android特殊广播接收者
- C++之内联函数
- C++学习笔记(三)
- centos ngnix 配置thinkphp 当模式为2的时候
- redis点滴(六)redis主从复制
- python 3 requests模块
- 重载和重写
- 欢迎使用CSDN-markdown编辑器
- Python 繁体中文与简体中文相互转换
- Java源文件的声明规则