zoukankan      html  css  js  c++  java
  • 内联函数

    早期作用是用来代替宏

    宏函数的缺陷

    #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.不能对函数进行取址操作

  • 相关阅读:
    0x01 虚拟环境搭建
    python操作mysql8windows环境
    Navicat 导入sql文件执行失败问题的处理
    mysql8.0.16免安装教程
    zend studio 9.0.3 注册码
    oneplus8手机蓝牙连接tws耳机无法双击退出语音助手
    竞品分析
    源码阅读方法
    Tomcat内核1
    Asp.NetCore3.1开源项目升级为.Net6.0
  • 原文地址:https://www.cnblogs.com/yifengs/p/15123193.html
Copyright © 2011-2022 走看看