CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

C++知识点10:内联函数-源码交易平台丞旭猿

10.1 内联函数的引出宏函数有一定的缺陷,因此在 C++ 中引出了内联函数说明:自此,可以下结论, C++ 中尽可能少使用宏,宏常量:用 const 修饰的常量代替宏函数:用内联函数代替

缺陷 1:宏函数 需要将实现加 括号,以保证优先级的完整性例:相加宏函数错误用法:define MYADD(x, y) x + yvoid test(){int ret = MYADD(10, 20) * 20; // 10 + 20 * 20cout << “ret = ” << ret << endl; // 结果: 410}正确用法:define MYADD(x, y) ((x)+(y))void test(){int ret = MYADD(10, 20) * 20; // (10 + 20) * 20cout << “ret = ” << ret << endl; // 结果: 600}

缺陷 2:即使加了括号 有些情况 依然有缺陷define MYCOMPARE(a,b) (((a) < (b)) ? (a) : (b))void test(){int a = 10;int b = 20;int ret = MYCOMPARE(++a, b); // 本意: 11 < 20, 返回 11// 但实际上, (((++a) < (b)) ? (++a) : (b))  11 < 20, 返回 ++a (此时 a=11)  即返回了 12cout << “ret = ” << ret << endl; // 结果: 12}

注意:采用普通函数,反而不会出错int myCompare(int a ,int b) // 普通函数 不会出现 错误{return a < b ? a : b;}void test(){int a = 10;int b = 20;int ret = myCompare(++a ,b) // 返回就是 a 且此时 a = 11cout << “ret = ” << ret << endl; // 结果: 11}但普通函数又不能以空间换时间————————————————————————————————————————————因此引出 C++中的内联函数

10.2 内联函数的几点说明1、 内联函数本身是一个真正的函数 // 但,宏函数不是函数2、 内联函数具有普通函数的所有行为唯一不同之处在于:内联函数会在适当的地方像定义宏一样展开,可以以空间换时间因此, 内联函数既可以避免宏函数的缺陷,也可以避免普通函数入栈的时间浪费3、 在普通函数函数前面加上 inline 关键字使之成为内联函数4、 如果有函数声明,函数本身和声明必须同时加 inline 关键字,否则视为普通函数5、 任何在类内部定义的函数会自动成为内联函数6、 下列情况,普通函数即使指定为内联函数,编译器也可能考虑不按内联编译1)存在任何形式的循环语句2)存在过多的条件判断语句3)函数体过于庞大4)对函数进行取址操作7、 使用方式建议:1)内联仅仅只是给编译器一个建议,编译器不一定会接受这种建议2)如果你没有将函数声明为内联函数,那么编译器也可能将此函数做内联编译(一个好的编译器将会内联小的、简单的函数)因此,不用刻意使用内联函数,可以交给编译器去自行处理

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容