美文网首页
C++中使用const代替#define定义常量

C++中使用const代替#define定义常量

作者: b036101467d7 | 来源:发表于2019-05-22 09:58 被阅读0次

    C++中应避免使用#define,因#define没有作用域的概念,因此会破坏C++的封装性;另一方面,预处理器会在编译前将替换#define定义的常量,程序中没有了定义的标识符,会影响debug或crash问题的查找;另外被常量值替换了的常量出现在多处,就可能在多个位置存储,增加程序体积。C++中可使用const代替#define,避免上述问题。
    如:

    #define PI  3.1415926
    

    应替换为:

    const double PI = 3.1415926;
    

    如果C++类中使用了数组,数组需要提前定义其大小,以往使用#define可以定义数组大小,怎么避免呢?

    方法有二:

    1. 类中定义静态常量:

    Stati.h:

    class Stati {
    
    private:
    
         static const int ArrayNum = 5;//声明静态的数组大小常量
    
         int StatiArray[ArrayNum];
    
    };
    

    Stati.cpp

    const int Stati::ArrayNum;
    
    1. 使用enum枚举:

    Stati.h :

    class Stati {
    
    private:
    
        enum { ArrayNum = 100 };
    
        int ArrayNum[ArrayNum];
    
    };
    

    还有一种#define定义宏的形式,主要为了提高运行效率及代码简洁,可以使用inline定义的函数模板代替。以避免

    define定义宏可能产生的副作用:

    #define GET_MAX(a, b) ((a) > (b) ? (a) : (b))
    

    上述#define形式可替换为如下函数模板形式:

    template<typename T>
    
    inline const &T getMax(const T &a, const T &b) {
    
         return a > b ? a : b;
    
    }
    

    相关文章

      网友评论

          本文标题:C++中使用const代替#define定义常量

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