美文网首页程序员
尽量以const,enum,inline替换#define

尽量以const,enum,inline替换#define

作者: 小鱼号的代码日记 | 来源:发表于2020-05-03 23:07 被阅读0次

    对于单纯常量,最好以const对象或enums替换#define

    对于形似函数的宏,最好改用inline函数替换#define

    /***************************
    effectivre c++
    改善程序与设计的55个具体做法
    条款2:尽量以const,enum,inline替换#define
     ---------小鱼号的代码日记--------------
    ****************************/
    
    
    #include<iostream>
    using namespace std;
    template<typename T>
    void f(const T& max)
    {
       cout << max << endl;
    }
    template<typename T>
    inline void callWidthMax(const T &a,const T & b)
    {
      f(a > b ? a:b);
    }
    
    #define CALL_WITH_MAX(a,b) f((a) >(b) ? (a):(b))
    /*********************************
     你必须记住为宏中的所有实参加上小括号
     纵然加上小括号也会有不可思议的事情发生
    **********************************/
    int main()
    {
       int a= 5, b = 0;
       CALL_WITH_MAX(++a,b);   //a被累加二次
       CALL_WITH_MAX(a++,b);   //a被累加一次
       return 0;
    }
    /*****************************************
     总结:
     对于单纯常量,最好以const对象或enums替换#define
     对于形似函数的宏,最好改用inline函数替换#define
    *********************************/
    

    内容选自:
    effectivre c++
    改善程序与设计的55个具体做法

    相关文章

      网友评论

        本文标题:尽量以const,enum,inline替换#define

        本文链接:https://www.haomeiwen.com/subject/gyrsghtx.html