有时候我们希望某些常量只在类中有效,而#define定义的宏常量是全局的,不能达到我们的要求。非静态const数据成员是属于每一个对象的成员,只在某个对象的生存期内是常量,而对于整个类来说它是可变的,除非是static const。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。

不能在类声明中初始化非静态const数据成员

  1. class A 
  2.    ... 
  3.    const int SIZE = 100;//错误,在类声明中初始化const数据成员 
  4.    int array[SIZE];//错误,未知的SIZE 
  5. }; 
  6. 非静态数据成员的初始化只能在类的构造函数的初始化列表中进行。如下 
  7. class A 
  8.     ... 
  9.     A(int size); 
  10.     const int SIZE; 
  11. }; 
  12.  
  13. A::A(int size) : SIZE(size) 
  14.     .... 
  15.  
  16. A a(100);//对象a的SIZE值为100 
  17. A b(200);//对象b的SIZE值为200 

 

怎样才能建立在整个类中都恒定的常量呢?用枚举常量来实现

  1. class A 
  2.     ... 
  3.     enum 
  4.     { 
  5.       SIZE1 = 100,//枚举常量 
  6.       SIZE2 = 200 
  7.     }; 
  8.     int array1[SIZE1]; 
  9.     int array2[SIZE2]; 
  10. }; 

枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是不能表示浮点数和字符串。