首页 > 其他分享 >#define和inline的区别(转)

#define和inline的区别(转)

时间:2023-05-07 15:57:08浏览次数:31  
标签:函数 区别 编译 编译器 inline define

原文:https://blog.csdn.net/weixin_43870837/article/details/107350586

特性差异

对于两者的区别涉及到c与c++语言两者的差异性。
C++有着更加严格编译系统,这使得C++程序的错误在编译阶段即可发现许多问题,从而使得出错率大为减少。
也正是因为如此,c++中引入inline来代替define的功能。inline相比较于define有着更加强大的功能。

区别

#define
预编译时进行简单的字符替换,不进行类型检查等操作,保存在预编译器的符号表中。
#inline
为了替代define功能成为真正出函数,调用时有严格的参数检测;它也可作为类的成员函数,保存在预编译器的符号表中。

inline优缺点

优点:inline函数是一个真正的函数,它可以进行参数检测,相比较于普通函数,它的执行效率上更加快速
缺点:浪费内存。inline函数在函数调用的地方会在预编译的时候生成一份函数的拷贝,也就是说,只要有调用inline函数的地方,就会生成一处拷贝而普通的函数在函数调用的地方只是存储了此函数的地址

总结

inline函数可以说是对编译器进行提出建议,是否最终成为内联函数做最后的替换操作编译器说了算,编译器有权拒绝。

因此inline函数一般内容也就几行,行数过多的话相比较于inline函数的优点,它所暴露出的缺点更加严重(内存占用过大),也就是这个原因,对于规模较大的inline函数编译器可以拒绝其成为内联函数而退化成普通函数使用。

标签:函数,区别,编译,编译器,inline,define
From: https://www.cnblogs.com/tan-wm/p/17379427.html

相关文章

  • 关于docker的Cgroup Driver相关的配置说明以及其值为cgroupfs与systemd的区别
    在我们安装完docker-ce软件后(笔者这里安装的docker-ce-20.10.24-3.el8.x86_64)就可以直接启动docker服务 systemctlrestartdocker.service这时我们通过 dockerinfo命令,可以看到当前docker的一些配置信息,今天笔者主要是看CgroupDriver相关的,如下:[root@k8s-masterqq-5201......
  • 简单说说HashMap和LinkedHashMap的区别
    HashMap和LinkedHashMap的区别我们知道HashMap的变量顺序是不可预测的,这意味着便利的输出顺序并不一定和HashMap的插入顺序是一致的。这个特性通常会对我们的工作造成一定的困扰。为了实现这个功能,我们可以使用LinkedHashMap。LinkedHashMap详解先看下LinkedHashMap的定义:pu......
  • vue v-bind与v-model的区别
    1.v-bind是单向绑定,用来绑定数据和属性以及表达式,数据只能从data流向页面;v-model是双向绑定,数据能从data流向页面,也能从页面流向data。2.v-bind可以给任何属性赋值,v-model只能给表单类,也就是具有value属性的元素进行数据双向绑定,如input、text、radio、checkbox、selected。可以......
  • 负载均衡和反向代理的区别
    Client和负载均衡设备之间的报文交互过程RS和负载均衡设备之间的报文交互过程结果分析:TCP握手过程:同反向代理模式交互过程HTTP报文交互过程:    Client向负载均衡设备的VIP地址172.16.75.84以源IP10.8.21.40发送HTTP请求,当负载均衡设备收到报文后,与优选后的RS进行TCP三......
  • APP和WEB的测试区别
    在功能测试时,要考虑手机应用的特性:1)手机屏幕尺寸偏小,所以手机应用一般就占满了全屏,因此要考虑手机在前后端切换时被测试应用在资源使用时的优先级变化情况;还要考虑手机横竖屏切换时的测试2)手机是智能移动终端,因此要考虑网络运营商、网络信号强弱、网络信号有无、被测试应用在低电......
  • float和double有什么区别
    https://baijiahao.baidu.com/s?id=1717564367074475880&wfr=spider&for=pcfloat和double有什么区别: float:单精度浮点数。 double:双精度浮点数。 两者的主要区别如下: 01.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节。 双精度浮点数在机......
  • oracle中int类型和number类型区别
    oracle中int类型和number类型区别 INT类型是NUMBER类型的子类型。下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数。假设定义SAL列为NUMBER(6,2)则整数最大位数为4位(6-2=4),而小数最大位数为2位。(2)INT类型当定......
  • AD和LDAP的区别
    LDAP是轻量目录访问协议(LightweightDirectoryAccessProtocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化版本AD是Active Directory的缩写,AD应该是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数......
  • C# Lambda表达式select()和where()的区别
    1、where()用法:必须加条件,且返回对象结果。string[]arrays={"asd","abc","bbb","ccc"};varresults=arrays.Where(a=>a.Contains("b"));//必须加条件,返回对象2、select()用法:(1)(a=>a.Value=="22")加条件查询时,返回bool型结果;(2)(a=......
  • Ganymed-SSH2和JSch的区别及优缺点
    Ganymed-SSH2和JSch都是Java中用于实现SSH客户端的库。下面是它们的区别及优缺点:区别:Ganymed-SSH2:Ganymed-SSH2是一款轻量级的SSH-2实现,它提供了简单易用的API,支持SSH客户端和服务器端的开发。Ganymed-SSH2主要使用纯Java编写,可以在所有支持Java的平台上运行,不需要任何本地库或......