设为首页收藏本站
查看: 337|回复: 2

9.《剑指C++》之从C到C++(9)

[复制链接]
  • TA的每日心情
    擦汗
    昨天 08:01
  • 签到天数: 760 天

    [LV.10]以坛为家III

    发表于 2020-6-14 14:11:39 | 显示全部楼层 |阅读模式
    本帖最后由 御天行 于 2020-6-15 10:00 编辑

    ======《剑指C++系列》:总目录======

    本讲主要介绍:内联函数
    引入
    C语言中有宏函数的概念。其特点是内嵌到调用代码中去,避免了函数调用的开销。但是由于对于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语义差错。
    1. #include <iostream>
    2. using namespace std;

    3. #define SQR(x) ((x)*(x))

    4. int sqr(int x){
    5.     return x*x;
    6. }

    7. int main()
    8. {
    9.     int i = 0;

    10.     cout<<"SQR(i++):"<<endl;
    11.     while(i<5){
    12.         cout<<SQR(i++)<<endl;
    13.     }

    14.     int j = 0;

    15.     cout<<"sqr(j++):"<<endl;
    16.     while(j<5){
    17.         cout<<sqr(j++)<<endl;
    18.     }

    19.     return 0;
    20. }
    复制代码


    以上案例,证明了,函数是在调用时求值,而宏函数是先替换,再调用。这两者的区别导致了上述两个函数的输出值是不同的。
    宏函数与普通函数对比
    ===================================================
    宏函数:
            优点:内嵌代码,避免压栈与出栈的开销。
            缺点:代码替换,易是生成代码体积变大,易产生逻辑错误,无类型检查 。
    普通函数:
            优点:高度抽象,避免重复开发,类型检查。
            缺点:压栈与出栈,带来开销。
    ===================================================
    内联函数
    内联函数,兼备宏函数的快速,也具备普通函数的优点。在普通函数前面加上关键字inline,即可成为内联函数。
    1. inline int sqr(int x){
    2.     return x*x;
    3. }
    复制代码

    内联函数小结:
    优点:避免调用时的额外开销(入栈与出栈操作)
    代价:由于内联函数的函数体在代码段中会出现多个"副本",因此会增加代码段的空间。
    本质:以牺牲代码段空间为代价,来提高程序的运行时间的效率。
    使用场景:函数体很"小",(一般控制在5--10行之内)且被频繁调用。
    需要注意的是:内联函数是以牺牲代码段空间为代价,而换取效率的,必须严格控制函数体的大小,否则即使声明为内联函数,也会被编译器默认优化掉,使之成为普通函数的。
    内联函数的应用场景
    一般来说,inline适用的函数有两种,一种是在类内定义的成员函数,另一种是在类内声明,类外定义的成员函数,由于我们这里还没有讲解到C++的"类"等概念,暂时不做叙述,等以后用到时再进行补充说明。
    上一篇:8.堆内存操作:new/delete
    下一篇:10.类型强转

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
  • TA的每日心情
    开心
    昨天 12:21
  • 签到天数: 1463 天

    [LV.10]以坛为家III

    发表于 2020-6-15 12:34:12 | 显示全部楼层
    感谢楼主分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    发表于 2020-7-1 10:17:56 来自手机 | 显示全部楼层
    学习了 感谢楼主分享
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐 上一条 /3 下一条

    红盟社区--中国红客联盟 

    Processed in 0.075614 second(s), 16 queries.

    站点统计| 举报| Archiver| 手机版| 黑屋 |   

    Powered by HUC © 2001-2017 Comsenz Inc.

    手机扫我进入移动触屏客户端

    关注我们可获取更多热点资讯

    Honor accompaniments. theme macfee

    快速回复 返回顶部 返回列表