c ++ 常量【高质量c++编程】

    技术2022-05-20  36

      C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:

    (1)  const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

    (2)  有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

     

    不能在类声明中初始化const数据成员。以下用法是错误的,因为类的对象未被创建时,编译器不知道SIZE的值是什么。

     

    class A

        {…

           const int SIZE = 100;    // 错误,企图在类声明中初始化const数据成员

           int array[SIZE];     // 错误,未知的SIZE

        };

    解读:因为此时的SIZE ,对象没有创建,他是不存在的,没有值的。

    const数据成员的初始化只能在类构造函数的初始化表中进行

     

    怎样才能建立在整个类中都恒定的常量呢?别指望const数据成员了,应该用类中的枚举常量来实现。例如

        class A

        {…

           enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量

           int array1[SIZE1];  

           int array2[SIZE2];

        };

        枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。


    最新回复(0)