C/C++内联函数
2021/9/7 1:07:47
本文主要是介绍C/C++内联函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考链接:
- C/C++内联函数
- C++类里面的哪些成员函数是内联函数?
解析
内联 inline 是个修饰符,用来修饰体积不大又调用频繁的函数,可以减小函数调用的开销。
所谓减小开销,就是在编译时把函数体的代码嵌入进去,达到和宏类似的效果,这样程序在运行到该函数时,就不需要在频繁的跳转中消耗栈的空间。
从经验上来说,函数体在10行以内,执行逻辑极其简单(写值,简单的判断和计算等),调用又十分频繁,尤其是一些工程代码中会放在周期循环里一直跑的,联系到其它模块的函数,就可以写成内联函数。
格式:inline + <函数头>
在函数头前面加上个inline就行,但有一点要注意,inline修饰的函数要当场给出其原型。inline只是修饰符,不能用作声明。
下面写法是不允许的:
inline int max(int a,int b); int max(int a,int b) { //...... }
下面写法是允许的:
int max(int a,int b); inline int max(int a,int b) { //...... }
内联函数无法使用for,while,switch语句。
慎用内敛函数,除非它足够简单。最好把它们统一写到一个头文件里使用。
内联函数的优缺点
- 优点:避免函数调用时的额外开销
- 缺点:由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码段的空间。
- 本质:以牺牲代码段空间为代价,提高程序的运行时间的效率。
- 适用场景:函数体很“小”,且被“频繁”调用。
和宏有什么区别?
- 内联函数在运行时可调试,而宏定义不可以;
- 编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;
- 内联函数可以访问类的成员变量,宏定义则不能;
- 在类中声明同时定义的成员函数,自动转化为内联函数。
C++类中哪些成员函数是内联函数?
1. 隐式内联:定义在类里面是隐式内联函数
class Person { public: Person(const string &name) { Name = name; } void printName()//printName 定义在类里面是隐式内联函数 { cout << Name << endl; } private: string Name; };
2. 在类里面显示声明,在类外面定义
class Person { public: Person(const string &name) { Name = name; } inline void printName();//成员被函数前加了inline是显式内联函数 //在类里面显式声明 private: string Name; }; void Person::printName() {//在类外面定义 cout << Name << endl; }
3. “追加”内联:表示在类里面没有显式声明,在类外显示定义了内联
class Person { public: Person(const string &name) { Name = name; } void printName(); //在类里面没有显式声明 private: string Name; }; inline void Person::printName()//成员被函数前加了inline是显式内联函数 {//在类外面显式定义 cout << Name << endl; }
常见的成员函数不是内联函数定义不再类里面,且声明和定义都没有inline.
这篇关于C/C++内联函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 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构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用