《高质量C++编程指南》第5章~常量--【优秀的编程思想】

版权声明:本文为博主原创文章,未经允许,不得转载!欢迎留言附带链接转载! https://blog.csdn.net/qq_15698613/article/details/89603240

目录

第5章 常量

5.1 为什么要使用常量

5.2 const 与 #define的比较 

5.3 常量定义的规则 

5.4 类中的变量 


 第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];
};

 枚举常量不会占用对象存储空间,但是隐含数据类型必须是整数,且最大值有限,不能表示浮点数

猜你喜欢

转载自blog.csdn.net/qq_15698613/article/details/89603240