inline内联函数和宏的区别

2023-05-16

1、内联函数在编译时展开,而宏在预编译时展开

2、在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。

3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能。

4、宏不是函数,而inline是函数

5、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。


C++ inline函数

inline函数一般用于比较小的,频繁调用的函数,这样可以减少函数调用带来的开销。只需要在函数返回类型前加上关键字inline,即可将函数指定为inline函数。


inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。


同其它函数不同的是,最好将inline函数定义在头文件,而不仅仅是声明,因为编译器在处理inline函数时,需要在调用点内联展开该函数,所以仅需要函数声明是不够的。

例如:
  1 #include <iostream>
  2
  3 using namespace std;
  4
  5 inline int add(int a, int b)
  6 {
  7         return (a + b);
  8 }
  9
 10 int main(void)
 11 {
 12         cout << add(1, 2) << endl;
 13
 14         return 0;
 15 }
以上12行处在编译时将被展开为:
cout << (a + b) << endl;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

inline内联函数和宏的区别 的相关文章

随机推荐

  • 吃透Redis(十一):Redis原子性的保证

    redis原子性保证 Redis server 一旦和一个客户端建立连接后 xff0c 就会在事件驱动框架中注册可读事件 xff0c 这就对应了客户端的命令请求 而对于整个命令处理的过程来说 xff0c 我认为主要可以分成四个阶段 xff1
  • Matlab编程技巧:A*算法仿真

    本文通过Matlab编程实现A 算法 xff0c 并通过几个简单的例子 xff0c 打断点调试输出A 搜索的过程 文章目录 1 A 算法简介2 Matlab编程实现2 1 输入参数2 2 初始化变量2 3 循环过程2 4 循环后处理 3 调
  • python中np.max与np.maximum的区别

    在使用numpy的时候 xff0c 我们会遇到取最大的问题 xff0c 常用的函数有两个 xff1a np max与np maximum xff0c 那么它们的主要区别在哪里呢 xff1f np max a axis 61 None out
  • Linux下网络编程5种实现(源代码)

    学习整理Linux网络编程5种服务器模型多线程 多进程 Select Poll Epoll实现源代码 xff0c 注释较为详细 xff0c 方便初学者学习 1 简单阻塞式客户端服务器实现 xff1a 如若链接打不开 xff0c 复制网址到浏
  • Proxifier使用教程

    https blog csdn net u013066730 article details 88788191 很详细 另外shadowshocks代理服务器的IP地址 地址获取 win 43 R cmd ipconfig 无线网区域的ip
  • Pascal's Triangle II:节省空间杨辉三角

    Given an index k return the k th row of the Pascal 39 s triangle For example given k 61 3 Return 1 3 3 1 Note Could you
  • rl: (7) Failed to connect to get.rvm.io port 443: Operation timed out

    问题 xff1a curl L https get rvm io bash s stable 命令失败 报错内容 xff1a rl 7 Failed to connect to get rvm io port 443 Operation t
  • 微信公众号授权scope参数错误或没有scope权限

    背景描述 xff1a 使用微信公众号测试号进行微信公众号开发 xff0c 配置完公众号菜单之后 xff0c 点击按钮 xff0c 调转出现白页 xff0c 并提示 xff1a 微信公众号授权scope参数错误或没有scope权限 xff1b
  • LDAP统一认证服务解决方案

    LDAP是什么 首先LDAP是一种通讯协议 xff0c LDAP支持TCP IP 协议就是标准 xff0c 并且是抽象的 在这套标准下 xff0c AD xff08 Active Directory xff09 是微软出的一套实现 那AD是
  • 2021-07-02随笔JAVA面试题

    List和Set的区别 List和Set都是接口 他们各自有自己的实现类 有无顺序的实现类 也有有顺序的实现类 最大的不同就是List是可以重复的 而Set是不能重复的 List适合经常追加数据 插入 删除数据 但随即取数效率比较低 Set
  • 从用户管理系统中复习javaweb知识9

    前面我们算是基本完成了用户注册这个功能 xff0c 但是也是仅仅实现了这个功能 xff0c 在实际应用中我们不能这么做 xff0c 而且用户也不会接受我们这样做 我们要做的还有很多 比如 xff0c 用户注册的时候填写用户名的时候我们得先验
  • 20210704 JAVA Redis和Memcached的一些区别

    什么是Memcache Memcache集群环境下缓存解决方案 Memcache是一个高性能的分布式的内存对象缓存系统 通过在内存里维护一个统一的巨大的hash表 它能够用来存储各种格式的数据 包括图像 视频 文件以及数据库检索的结果等 简
  • RocketMQ中ACL权限控制

    1 什么是ACL ACL是access control list的简称 xff0c 俗称访问控制列表 访问控制 xff0c 基本上会涉及到用户 资源 权限 角色等概念 xff0c 那在RocketMQ中上述会对应哪些对象呢 xff1f 用户
  • Removing obsolete files from server... Could not clean server of obsolete files: Premature end of fi

    Tomcat启动报如下错误 xff1a Removing obsolete files from server Could not clean server of obsolete files Premature end of file P
  • 数据库索引的作用优点和缺点

    为什么要创建索引呢 xff1f 这是因为 xff0c 创建索引可以大大提高系统的性能 第一 xff0c 通过创建唯一性索引 xff0c 可以保证数据库表中每一行数据的唯一性 第二 xff0c 可以大大加快 数据的检索速度 xff0c 这也是
  • Linux下开启和关闭Telnet服务

    码都不扫 xff0c 怎么扫Bug telnet与ssh相比 xff0c 安全性能并不高 xff0c 但是在SSH版本升级或者其他的情况下还是需要开启这一服务 linux提供服务是由运行在后台的守护程序 xff08 daemon xff09
  • java调用HTTP接口(Get请求和Post请求)

    敢扫吗 xff0c 不敢的话 xff0c 就别扫了 前提 xff1a 一个Http接口 xff1a http 172 83 38 209 7001 NSRTRegistration test add do id 61 8888888 amp
  • Spring boot+Security OAuth2 自定义登录和授权页面

    在学习了Spring Security oAuth2 0框架的基础知识 xff0c 以及动手搭建简单的认证服务器和资源服务器的基础上 xff0c 我们开始实现自定义登陆和授权界面的开发 在实际的项目开发中 xff0c 我们需要根据需要自定义
  • Spring Security oAuth2.0设置access_token和refresh_token的有效时长

    oAuth2 0中access token默认有效时长为12个小时 xff0c refresh token默认时长为30天 在实际运用中需要根据需求设置有效时长 在AuthorizationServerConfigurerAdapter 重
  • inline内联函数和宏的区别

    1 内联函数在编译时展开 xff0c 而宏在预编译时展开 2 在编译的时候 xff0c 内联函数直接被嵌入到目标代码中去 xff0c 而宏只是一个简单的文本替换 3 内联函数可以进行诸如类型安全检查 语句是否正确等编译功能 xff0c 宏不