《高质量C++编程指南》第5章~常量--【优秀的编程思想】
目录
第5章 常量
C语言用#define来定义常量,称为宏常量
C++语言除了#define外还可以用const来定义常量
5.1 为什么要使用常量
(1)程序的可读性
(2)程序很多地方输入同样数字或者字符串,难保不发生错误
(3)如果要修改数字或字符串,在很多地方修改,容易出错
(1)尽量使用含义直观的常量来表示
#define MAX 100 //C语言的宏常量
const int MAX = 100; //C++语言的const常量
const float PI = 3.1415 ; //C++语言的const常量
5.2 const 与 #define的比较
const与#define变量,前者比后者有更多 有点:
(1)const 常量有数据类型,宏常量没有数据类型,编译器可以对前者进行类型检查,后者只有字符替换,可能出现意想不到的错误
(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量调试
(3)C++程序中,只是用const, 不使用宏,因为const常量可以完全取代宏 常量
5.3 常量定义的规则
(1)需要对外公开的常量放在头文件中,不需要公开的常量放在定义文件的头部,可以把不同模块常量几种存放在一个公共头文件中
(2)如果某一常量与其他常量密切相关,应该包含这种关系,不应该给出孤立的值
const float RADIUS =100 ;
const float DIAMETER = RADIUS *2;
5.4 类中的变量
有时我们希望某些常量只在类中有效,而#define定义的宏常量是全局的,不能达到目的,于是认为const可以,但是const的含义却不是我们所期待的,const数据成员只在某个对象生存周期内是常量,对于整个类而言却是可变的,类可以创建多个对象,不同对象其const数据成员的值可以不同!
不能在类声明中初始化const数据成员,因为编译器不知道SIZE是什么
-
class A
-
{
-
const int SIZE = 100;//错误,企图在类声明中初始化const数据成员
-
int array[SIZE]; //错误,未知的SIZE
-
};
-
-
class A
-
{
-
A(int size); //构造函数
-
const int SIZE;
-
};
-
A::A(int size):SIZE(size) //构造函数的初始化表
-
{
-
...
-
}
-
-
A a(100);//对象a的SIZE为100
-
A b(100);//对象a的SIZE为200
怎么在整个类中恒定常量呢?枚举!
-
class A
-
{
-
enum {SIZE1 = 100, SIZE2 = 200};
-
int array1[SIZE1];
-
int array2[SIZE2];
-
};
枚举常量不会占用对象存储空间,但是隐含数据类型必须是整数,且最大值有限,不能表示浮点数
文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。
原文链接:kings.blog.csdn.net/article/details/89603240
- 点赞
- 收藏
- 关注作者
评论(0)