• 内联函数


    早期作用是用来代替宏

    宏函数的缺陷

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    //缺陷1:没有类型
    //#define MyAdd(x,y) x+y
    //解决方法:加括号
    #define MyAdd(x,y) ((x)+(y))
    
    void test101()
    {
        int ret = MyAdd(10, 20) * 20;    //预期结果600 结果是410  10+20*20  加括号后值为600
        cout << "ret=" << ret << endl;
    }
    
    //缺陷2:
    #define MyCompare(a,b) ((a)<(b))?(a):(b)        //返回最小值
    void test102()
    {
        int a = 10;
        int b = 20;
    
        int ret = MyCompare(a, b);    //预期: ((a)<(b))?(a):(b)  返回10 没有问题
        int ret = MyCompare(++a, b);    //预期:11 ((++a)<(b))?(++a):(b) 结果:12
        cout << "ret = " << ret << endl;
    }
    //缺陷3:宏函数没有作用域
    
    int main()
    {
        test101();
        system("Pause");        //阻塞功能
        return EXIT_SUCCESS;    // 返回正常退出
    }

    内联函数

    保留宏函数的短小可替代,不用在内存开辟栈,省去函数调用的开销的优点,又不会像宏一样出现不可预期的错误

    inline int func(int a) {return ++;}  //会把函数func(int a)替换成大括号的内容 

    注意事项

    1.类的成员函数 默认会在前面加上inline关键字

    2.声明和实现分开写的时候都要加inline关键字

    inline void func();    //内联函数声明
    inline void func() { };    //如果函数实现的时候没有加inline关键字,那么这个函数依然不算内联函数

    优点

    空间换时间,省去函数调用的开销时间

    限制

    1.不能存在任何形式的循环语句

    2.不能存在过多的条件判断语句

    3.函数体不能过于庞大

    4.不能对函数进行取址操作

  • 相关阅读:
    输入输出重定向
    进程管理
    普通变量_环境变量_环境变量配置文件
    高级文件操作命令_文件查找
    软件包管理_rpm命令管理_yum工具管理_文件归档压缩_源码包管理
    用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
    字符串是否包含中文
    SQL 优化
    JS数组
    RedisUtil 工具类
  • 原文地址:https://www.cnblogs.com/yifengs/p/15123193.html
Copyright © 2020-2023  润新知