前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】基础知识--inline(内联)关键字以及与宏的区别

【C++】基础知识--inline(内联)关键字以及与宏的区别

作者头像
用户11036582
发布2024-06-28 09:31:36
990
发布2024-06-28 09:31:36
举报

一、什么是内联函数

内联关键字是inline,用于修饰函数,内联函数的实现需要inline关键字的修饰,内联函数的声明不需要使用inline修饰,只在使用该函数的时候进行修饰即可,只在函数的声明加上inline关键字是不生效的。

二、内联函数和宏区别

2.1宏定义

宏的本质其实就是在程序的预处理阶段,无脑的进行宏符号替换,替换时不做语法的检查,比如比如"入参"类型是否匹配,"入参"个数是否匹配等。

2.2内联函数

内联函数的本质:inline关键字会告诉编译器,此函数是内联函数,希望编译器尽可能的在编译阶段将此函数展开到调用此函数的地方,且对此内联函数按照常规函数一样进行语法检查,比如入参类型,入参个数等。

2.3内联和宏的区别

2.3.1语法检查的区别
2.3.2处理阶段

内联函数编译阶段被处理

三、内联函数和普通函数

3.1普通函数

常规函数调用时会使程序跳到另一个地址(函数的地址),并且在函数结束时返回。

  1. 执行函数调用指令,立即存储该指令的地址,并将函数参数保存到的堆栈。
  2. 跳到函数起点的内存单元,执行函数代码(将返回值保存到寄存器中。
  3. 跳回被保存指令的地址处。

这一过程和系统中的中断很类似。来回跳跃并记录跳跃位置意味着使用普通函数时,需要一定的开销。

3.2内联函数

内联函数就是 编译器将使用相应的函数代码代替了函数调用(没有读懂这句话可以直接跳到最后的思考) 。程序不用为了执行函数而来回跳动。 所以 内联函数的运行速度比普通函数快,但代价是占用了更多的内存。

1.语法

1.在函数声明前加上关键字 inline。(也可以不加) 2.在函数定义前加上关键字 inline。

但是通常的做法 省略原型,就是将整个定义放在原来声明函数的位置。

2.注意

程序员试图将函数作为内联函数的时候,编译器可能不会满足要求,原因:

1.它可能认为函数过大。 2.函数调用了自己(内联函数不能递归)

四、选择地使用内联

  1. 如果执行函数的时间比处理函数调用机制的时间长,则节省的时间只占很小一部分。
  2. 如果代码执行时间很短,这使得非内联调用的时间显得占比大。则内联调用就可以节省大部分时间。
  3. 如果该函数多次使用,则就要看我们得需求是什们,要求速度,就用内联,要求内存,就用非内联。

注意事项:

宏的优缺点? 优点: 1.增强代码的复用性。 2.提高性能。

缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差,容易误用。 3.没有类型安全的检查 。 C++有哪些技术替代宏?

常量定义 换用const enum 短小函数定义 换用内联函数 长不用,短用内联函数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、内联函数和宏区别
    • 2.1宏定义
      • 2.2内联函数
        • 2.3内联和宏的区别
          • 2.3.1语法检查的区别
          • 2.3.2处理阶段
      • 三、内联函数和普通函数
        • 3.1普通函数
          • 3.2内联函数
            • 1.语法
            • 2.注意
        • 四、选择地使用内联
        • 注意事项:
          • 宏的优缺点? 优点: 1.增强代码的复用性。 2.提高性能。
            • 缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差,容易误用。 3.没有类型安全的检查 。 C++有哪些技术替代宏?
              • 常量定义 换用const enum 短小函数定义 换用内联函数 长不用,短用内联函数。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档