相关文章
- C++构造函数、拷贝构造函数、赋值运算符漫谈(一)——函数参数传递
- C++内联函数的使用
- VC++线程函数内怎么调用外部函数
- C++ 内联函数
- C++ 四种强制类型转换
- (C++)C++多态性中的静态绑定和动态绑定
- C语言/C++常见习题问答集锦(三十二)之六种图案的字母金字塔
- [C++ 面试基础知识总结]表达式和函数
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
- C++Qt开发——QSS样式表
- VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 【华为OD机试 2023】获取最大软件版本号(C++ Java JavaScript Python)
- char*动态数组用c++ifstream和ofstream进行文件读写并用memset初始化
- c++ 回调函数与std::function使用实例
- C++使用技巧(七):输入函数的用法总结
- c++ 析构函数 ~
- Emacs之为c/c++函数生成调用图(八十)
- vc++实现avi文件的操作
- C++20: 缩写函数模板和约束性Auto
- VC++时间函数的使用(附源码)
- C/C++之宏、内联函数和普通函数的区别
- 13.IDA-显示正确的函数名称(去掉c++后缀命名)
- 【C++实践】C++代码接口封装 — “父类声明纯虚函数”法
- 通俗易懂OpenCV(C++版)详细教程——OpenCV函数快速查找(不断更新中)
- 【跟学C++】对C++的理解(Study1)
- PCL(c++)例子源码编译可执行工具完整统计
- C++的学习心得和知识总结 第二章|C++函数基础:默认值、内联和const及函数重载
引入内联函数的目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。这其实就是个空间代价换时间的i节省。所以内联函数一般都是1-5行的小函数。在使用内联函数时要留神:
Tip: 只有当函数只有 10 行甚至更少时才将其定义为内联函数。
定义: 当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.
优点: 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.
缺点: 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。
结论: 一个较为合理的经验准则是, 不要内联超过 10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用!
另一个实用的经验准则: 内联那些包含循环或 switch 语句的函数常常是得不偿失 (除非在大多数情况下, 这些循环或 switch 语句从不被执行).
有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要; 比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不应该声明成内联函数.(递归调用堆栈的展开并不像循环那么简单, 比如递归层数在编译时可能是未知的, 大多数编译器都不支持内联递归函数). 虚函数内联的主要原因则是想把它的函数体放在类定义内, 为了图个方便, 抑或是当作文档描述其行为, 比如精短的存取函数.