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

举报
王博Kings 发表于 2020/12/30 01:02:07 2020/12/30
【摘要】 目录 第5章 常量 5.1 为什么要使用常量 5.2 const 与 #define的比较  5.3 常量定义的规则  5.4 类中的变量   第5章 常量 C语言用#define来定义常量,称为宏常量 C++语言除了#define外还可以用const来定义常量 5.1 为什么要使用常量 (1)程序的可读性 (2)程序很多地方输入同样数字或者字...

目录

第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是什么


  
  1. class A
  2. {
  3. const int SIZE = 100;//错误,企图在类声明中初始化const数据成员
  4. int array[SIZE]; //错误,未知的SIZE
  5. };
  6. class A
  7. {
  8. A(int size); //构造函数
  9. const int SIZE;
  10. };
  11. A::A(int size):SIZE(size) //构造函数的初始化表
  12. {
  13. ...
  14. }
  15. A a(100);//对象a的SIZE为100
  16. A b(100);//对象a的SIZE为200

 怎么在整个类中恒定常量呢?枚举!


  
  1. class A
  2. {
  3. enum {SIZE1 = 100, SIZE2 = 200};
  4. int array1[SIZE1];
  5. int array2[SIZE2];
  6. };

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

文章来源: kings.blog.csdn.net,作者:人工智能博士,版权归原作者所有,如需转载,请联系作者。

原文链接:kings.blog.csdn.net/article/details/89603240

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。