C++的inline函数
2021/9/12 22:06:15
本文主要是介绍C++的inline函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、定义
inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。关键字inline在函数声明和定义的时候都要加上,不写系统还是会当成常规函数。
二、原理
普通函数的调用要经过“保存现场、转到被调函数执行、执行完毕返回调用处、恢复现场”这一系列过程,产生时空开销。而内联函数则是将函数的代码直接放在了函数的位置上,所以没有指令跳转,指令按顺序执行。但是,inline只适合简单的函数使用,不能包含复杂的结构控制语句例如switch,while,并且不能是直接递归函数(自己调用自己)。
注意:inline只是对编译器的一个建议
我们声明定义了内联函数,最终都要看编译器怎么决定,它觉得函数不复杂,可以在调用的地方展开,就会执行内联程序,但是如果编译器认为函数复杂,展开的开销比调用造成的栈空间消耗还大,就不会内联。更进一步,一个好的编译器能自动决定函数是否应该被当做内联函数使用,不管是否添加inline关键字。
三、什么时候使用内联函数
1)函数本身内容比较少,代码比较短,函数功能相对简单
2)函数被调用得频繁,不如循环中的函数
错误全局函数例子:function_inline
inline void function_inline(); void function_inline() { std::cout << __FILE__ << ":" << __LINE__ << "/" << __FUNCTION__ << std::endl; }
正确全局函数例子:function_inline
inline void function_inline() { std::cout << __FILE__ << ":" << __LINE__ << "/" << __FUNCTION__ << std::endl; }
运行结果
错误成员函数例子:class_inline::function_inline
//class_inline.h class class_inline { public: inline void function_inline(); }; //class_inline.cpp void class_inline::function_inline() { std::cout << __FILE__ << ":" << __LINE__ << "/" << __FUNCTION__ << std::endl; }
正确成员函数例子:class_inline::function_inline
//class_inline.h class class_inline { public: inline void function_inline() { std::cout << __FILE__ << ":" << __LINE__ << "/" << __FUNCTION__ << std::endl; } };
四、总结
优点:避免了指令的来回跳转,加快程序执行速度
缺点:代码被多次复制,增加了代码量,占用更多的内存空间
参考:
#C++基础# inline __forceinline __attribute__((always_inline)内联函数_潇汀-CSDN博客
内联函数_renwu-CSDN博客_内联函数
inline函数(内联函数) - KLSeis - 博客园
这篇关于C++的inline函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11国产医疗级心电ECG采集处理模块
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南