IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ inline函数 -> 正文阅读

[C++知识库]C++ inline函数

目录

inline函数定义

使用风格

为什么要使用内联函数

内联函数的一些使用建议


inline函数定义

在函数声明或定义返回值类型前添加关键字inline即将函数指定为内联函数

inline int max(int a,int b)

使用风格

关键字inline必须放在定义体前才能将成为函数内联函数,否则不起作用

例如:

inline int max(int a, int b);

int max(){

函数体

}

为什么要使用内联函数

在我们的代码中可能经常会遇到一种场景需要大量频繁得调用函数。调用函数就会为其创建栈空间,如果频繁的调用会给内存很大的压力,消耗大量的栈空间,inline函数可以缓解这个问题。

例如下面的代码:

inline int sub(int a,int b) {
    return a+b;
} 

int main()
{
   int i = 0;
   for (i=1; i < 100; i++) {
       printf("the sub is %d\n",sub(i,i+1));    
   }
}

?

循环 调用100次sub()函数,如果sub函数不声明为inline,系统会创建100次栈空间。但是这里我们将sub()函数声明成inline函数之后,任何调用sub()的地方都换成了"a+b",这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。


C++的”函数内联”工作方式


1.对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。
2.如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。
在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。
3.如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。

内联函数的一些使用建议

内联函数能提高函数的执行效率,那是否任何情况下都可以使用内联函数?这是不行的。

1.内联是以代码膨胀为代价,省去了函数调用的开销,提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。所以一般在在函数频繁调用且函数内部代码很少的情况下使用。
2.每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
3.一个好的编译器将会根据函数的定义体,自动地取消不值得的内联。

4.建议把inline函数的定义放到头文件中。在每个调用该inline函数的文件中包含该头文件。

类中的成员函数和inline?

定义在类中的成员函数默认都是内联的,如果在类定义时就在类内给出函数定义,那当然最好。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外定义上要加上inline,否则就认为不是内联的。

例如:?

class A
{
    public:
    void sub(int x, int y);
}


inline void A::sub(int x, int y){
函数体
} 

end?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:13:21  更:2022-03-15 22:15:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:19:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码