内联函数以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率 。
inline int Add(int x, int y){ return x + y;}int main(){ int z = Add(1, 2); return 0;}如果加了inline关键字,编译器在编译期间会用函数体替换函数的调用(类似于宏定义,在编译阶段就替换函数调用 , 将函数调用直接展开,减少了调用的时间,但是空间消耗巨大) 。
下面是内敛函数的几个特性:
1.inline是一种以空间换时间的做法,省去调用函数额开销 。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数 。2.inline对于编译器而言只是一个建议,编译器会自动优化 , 如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联(是否称为内联函数由编译器决定) 。3.inline不建议声明和定义分离 , 分离会导致链接错误 。因为inline被展开,就没有函数地址了,链接就会找不到 。
例子:一个相同的函数,一个加了inline 关键字,一个没加,加上一个函数要执行10条指令,文两个函数分别调用1000次要执行多少条指令?普通函数:1000+10(一次调用1次指令,加起来就是1000条,每次调用都是call函数,函数不展开就是10条)内联函数:1000*10条指令(展开就是每次调用都是10条指令)所以说,内联函数展开,会让程序变大,所以代码很短的函数可以考虑有内联,长函数和递归函数不适合用内联 。
auto关键字C++11中 , 标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得 。
int a = 10;auto b = a;// 自动推导b的类型为intauto c = 'c';// 自动推导类型为charcout << typeid(b).name() << endl;cout << typeid(c).name() << endl;//auto d;必须初始化有一下几种用法:
- auto与指针和引用结合起来使用(auto和auto*无区别)
文章插图
- 在同一行定义多个变量(这些变量类型必须相同,编译器只对第一个类型进行推导)
- auto不能作为函数的参数
- auto不能直接用来声明数组
推荐阅读
- 手机怎么把QQ空间说说一次性全删掉(qq如何恢复删掉的说说)
- 怎么一次性删掉QQ空间里的全部说说(翻看以前qq空间的说说)
- 怎么把空间说说全部清空(qq空间一键清空所有说说)
- 手机QQ空间怎么一次性删除说说求解(怎么一键删除qq说说)
- qq空间说说怎么全部删除(怎样一键清空qq空间)
- 如何注销空间 1980717Z空间
- qq空间说说怎么全部删除(qq空间说说一键恢复)
- QQ空间说说太多怎么一次性全删除(说说可以一键删除吗)
- 手机QQ空间怎么一次性删除说说求解(一键删除qq说说)
- 用电脑扣扣空间说说怎么批量删除(怎么批量删除自己qq空间说说)