问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用inline函数和宏定义什么区别

发布网友 发布时间:2022-04-14 21:43

我来回答

1个回答

热心网友 时间:2022-04-14 23:13

inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。
1.为什么要引入内联函数(内联函数的作用)
用它替代宏定义,消除宏定义的缺点。宏定义使用预处理器实现,做一些简单的字符替换因此不能进行参数有效性的检测。另外它的返回值不能被强制转换为可转换的合适类型,且C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作。
2.inline相比宏定义有哪些优越处
(1)inline函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销效率很高;
(2)inline函数是真正的函数,所以要进行一系列的数据类型检查;
(3)inline函数作为类的成员函数,可以使用类的保护成员及私有成员;
3.inline函数使用的场合
(1)使用宏定义的地方都可以使用inline函数;
(2)作为类成员接口函数来读写类的私有成员或者保护成员;
4.为什么不能把所有的函数写成inline函数
内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率。所以一方面如果内联函数体内代码执行时间相比函数调用开销较大没有太大的意义;另一方面每一处内联函数的调用都要复制代码,消耗更多的内存空间,因此以下情况不宜使用内联函数。
(1)函数体内的代码比较长,将导致内存消耗代价;
(2)函数体内有循环,函数执行时间要比函数调用开销大;
另外类的构造与析构函数不要写成内联函数。
5.内联函数与宏定义区别
(1)内联函数在编译时展开,宏在预编译时展开;
(2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换;
(3)内联函数有类型检测、语法判断等功能,而宏没有;
(4)inline函数是函数,宏不是;
(5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
交通工程好考公务员吗 交通工程类考公时包括哪些专业 交通工程专业的能报考什么样的公务员 交通工程专业往哪些方向考公务员 交通工程可以考公务员有哪些岗位 我专业交通工程。能考什么类型的公务员 支付宝怎么关联另一个账号 支付宝怎么关联另一个支付宝 支付宝关联账号在哪里?怎么添加? 京东买手机发票可以开别人名字吗 欧米茄精钢表正面写的deville co 手机背景图片好看的 哈佛h218款有全景天窗吗 2018哈弗h2车子全系后视镜都可以折叠么? 18款国六哈弗H2能高速驾驶后直接灭火吗? 2018款哈弗h2什么时候上市 18款哈弗h2油耗实际多少 2018款哈佛h2遥控钥匙可以关车窗吗? 谈谈宏定义和内联函数的利弊是什么 动车d3303和d3302是不是同辆车 绝地求生里边的摩托车做到一万多上路有什么困难? D3302动车是没开通2月2号三明北到温州南的车票吗 福建福鼎火车站有几趟动高铁经过 动车3210仃靠站 绝地求生新武器Win94在哪儿刷新 有什么车可以从椒江到宁波?在哪里坐?多少钱?多少时间?再从宁波到椒江坐什么车?来回多少钱?多少时间 在绝地求生二中艾伦格地图中真的有辆电动摩托车吗? 温岭到临海 黄岩到宁波最早与最晚火车时刻 福州北站有到罗源的动车吗? 康哲药业销售成本 为什么手机和成天下槟榔不能扫码? 车辆退保险怎么计算公式 深圳市康哲药业有限公司的发展历史 怎么把正在登录我steam的踢出去 太平洋保险退保的计算公式 绝地求生更改密码会不会强制下线 退保怎么算钱?现金价值? 和成天下什么时候恢复扫码 有谁知道24节气名字的由来? 红米4x怎么恢复出厂设置或者清除所有数据 红米4x怎么恢复出厂设置 怎么把红米手机 用电脑恢复出厂设置? 红米四手机怎么恢复出厂设置 电脑加装一个机械硬盘必须格式化吗?两个硬盘系统不一样? 加装固态硬盘 原机械硬盘是否需要格式化 三星7100的截屏的那个手机设置在哪里 三星手机怎么把截屏更改设置? 那里有学做翻糖蛋糕? 手机接u盘怎么打开