杂记之C语言之const常量在C++中的表现
2012-11-07 13:18
351 查看
const 数据成员只在某个对象生存期内是常量,而
对于整个类而言却是可变的,因为类可以创建多个
对象,不同的对象其const 数据成员的值可以不同。
不能在类声明中初始化const 数据成员。
以下用法是错误的,因为类的对象未被创建时,编
译器不知道SIZE 的值是什么。
class A
{⋯
const int SIZE = 100; // 错误,企图在类声明中初始化const 数据成员
int array[SIZE]; // 错误,未知的SIZE
};
const 数据成员的初始化只能在类构造函数的初始化表中进行,例如
class A
{ ⋯
A(int size); // 构造函数
const int SIZE ;
};
A::A(int size) : SIZE(size) // 构造函数的初始化表
{
⋯
}
A a(100); // 对象 a 的SIZE 值为100
A b(200); // 对象 b 的SIZE 值为200
怎样才能建立在整个类中都恒定的常量呢?别指望const 数据成员了,应该用类中
的枚举常量来实现。例如
class A
{⋯
enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量
int array1[SIZE1];
int array2[SIZE2];
};
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:
它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。
笔记摘自《高质量C++/C 编程指南》 林锐
对于整个类而言却是可变的,因为类可以创建多个
对象,不同的对象其const 数据成员的值可以不同。
不能在类声明中初始化const 数据成员。
以下用法是错误的,因为类的对象未被创建时,编
译器不知道SIZE 的值是什么。
class A
{⋯
const int SIZE = 100; // 错误,企图在类声明中初始化const 数据成员
int array[SIZE]; // 错误,未知的SIZE
};
const 数据成员的初始化只能在类构造函数的初始化表中进行,例如
class A
{ ⋯
A(int size); // 构造函数
const int SIZE ;
};
A::A(int size) : SIZE(size) // 构造函数的初始化表
{
⋯
}
A a(100); // 对象 a 的SIZE 值为100
A b(200); // 对象 b 的SIZE 值为200
怎样才能建立在整个类中都恒定的常量呢?别指望const 数据成员了,应该用类中
的枚举常量来实现。例如
class A
{⋯
enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量
int array1[SIZE1];
int array2[SIZE2];
};
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:
它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。
笔记摘自《高质量C++/C 编程指南》 林锐
相关文章推荐
- C++ 常量折叠和C语言中const常量对比
- C语言与C++中static,const 关键字的区别
- 【C语言 C++】简单keywordRegister,Const,Static,Volatile,typedef,Define的理解
- c++ const常量的实现机制(转载)2
- (转载)C++常量折叠和C语言中const常量对比
- C/C++中的const--常量指针与指针常量
- C++中常量指针,指针常量(const 和*)的使用方法和理解方法
- c语言const常量使用
- C语言的const与C++const的区别
- C++ - const常量与指针和引用之间的关系
- C++ Special:const关键字和常量指针 vs 指针常量
- C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
- C语言和C++中const的用法解析
- c++ const常量的实现机制
- C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
- C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解
- 【转】C++ 常量类型 const 详解
- 【C语言】C语言的const与C++的const区别
- C++中常量类型 const 详解
- C++ Special:const关键字和常量指针 vs 指针常量