第5章 常量
常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。
5.1 为什么需要常量
如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?
(1)       程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。
(2)       在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。
(3)       如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。
l         【规则5-1-1 尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。
例如:
#define         MAX   100       /*  C语言的宏常量  */
const int MAX = 100;      //  C++ 语言的const常量
const float PI = 3.14159;   //  C++ 语言的const常量
5.2 const 与 #define的比较
C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:
(1)       const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
(2)       有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
l         【规则5-2-1在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
5.3 常量定义规则
l         【规则5-3-1需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。
l         【规则5-3-2如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。
例如:
const floatRADIUS = 100;
const floatDIAMETER = RADIUS * 2;
5.4 类中的常量
有时我们希望某些常量只在类中有效。由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。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)。

转载于:https://www.cnblogs.com/wangzhanjianshe/archive/2007/06/21/2326506.html

高质量c/c++编程(5)相关推荐

  1. 高质量C++/C编程指南 ver 1.0

    高质量C++/C编程指南 ver 1.0 转载于:https://www.cnblogs.com/gavinhughhu/archive/2009/12/25/1631800.html

  2. 林锐 高质量c语言编程下载,新年献礼:Go语言深度入门手册

    (文末的阅读原文,效果最佳!) 作者:李佶澳 微信:lijiaocn Go 语言深度入门手册,帮你更好的理解 Go 语言,写出更高效.更规范.更不易出错的代码. Go 在 2012 年发布 1.0 版 ...

  3. C语言程序设计教程的读后感,《高质量c语言编程》读后感

    <高质量c语言编程>读后感 当认真看完一本名著后,大家一定对生活有了新的感悟和看法,现在就让我们写一篇走心的读后感吧.那么如何写读后感才能更有感染力呢?以下是小编收集整理的<高质量c ...

  4. c语言与程序设计读后感,《高质量c语言编程》读后感

    <高质量c语言编程>读后感 当细细地品读完一本名著后,想必你有不少可以分享的东西,这时候,最关键的读后感怎么能落下!现在你是否对读后感一筹莫展呢?以下是小编帮大家整理的<高质量c语言 ...

  5. 《高质量C/C++编程指南》摘要

    一.文件结构 避免头文件被重复引用,用 #pragma once 进行预处理 用 <> 引用标注库头文件,用 "" 引用自定义库头文件 C语言头文件只进行函数声明,不进 ...

  6. 高质量 C++/C 编程指南

    高质量 C++/C 编程指南 文件标识: 文件状态 [ ] 草稿文件 [√]正式文件 [ ] 更改正式文件 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001 年7 月24 日 高质量 C ...

  7. 高质量C++/C 编程指南

    高质量C++/C 编程指南 文件标识: 当前版本: 1.0 作 者: 林锐 博士 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 完成日期: 2001 年7 月24 日 高质量C+ ...

  8. 高质量C++/C编程指南 1

    高质量C++/C编程指南 文件状态 [ ] 草稿文件 [√] 正式文件 [ ] 更改正式文件 文件标识: 当前版本: 1.0 作 者: 林锐 博士 完成日期: 2001年7月24日 http://ma ...

  9. C/C++怎样编写高质量的程序:头文件和源文件模板------高质量C++/C编程指南-第1章-文件结构

    http://www.bianceng.cn/Programming/cplus/200705/614.htm 高质量C++/C编程指南-第1章-文件结构 第1章 文件结构 每个C++/C程序通常分为 ...

  10. 高质量c++/c编程指南pdf

    高质量c++/c编程指南pdf,以下是链接 链接:https://pan.baidu.com/s/1NJRhYYahSrjuVbk3rsnXzA  提取码:er89

最新文章

  1. 用看板工具leangoo做人事招聘
  2. 记一次 解决 vue 兼容ie11 的问题
  3. python各个解释器的用途-11 个优秀的 Python 编译器和解释器
  4. Linux 下mysql5.7安装搬运 该安装说明坑最少
  5. JDBC的开发流程是什么?
  6. 《JavaScript面向对象编程指南》—第128页错误指正
  7. Compass样式重置
  8. LeetCode 650. 只有两个键的键盘(DP)
  9. 第二章 UML与设计模式
  10. left+right /2_在C / C ++中使用Left Shift和Right Shift运算符
  11. CAD关于线型操作添加线型(com接口c#语言)
  12. 如何抓取蓝光DVD暮光之城月食为DivX AVI格式
  13. ADB远程桌面连接本地手机
  14. mysql列名命名_重命名MySQL中的列名?
  15. Java10-I/O
  16. Unregistering application *** with eureka with status DOWN
  17. android解析json数据格式,Android编程解析Json格式数据的方法
  18. oracle 日期 区别,oracle中日期类型 to_date 和to_timestamp什么区别啊?
  19. Windows驱动开发WDM (13)- 过滤驱动
  20. Android 原生控件之三 ProgressBar

热门文章

  1. c语言编译器内部错误,C++致命错误C1001:编译器中发生内部错误
  2. html 服务器运行exe,html运行exe文件,兼容浏览器
  3. 导致的死信的几种原因?
  4. java并发 并行 串行
  5. oracle 增加ora容量_oracle数据库报错:ORA-01653无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件...
  6. 页面转发后文本显示???_使用Divi的滑动动画显示过程的进度
  7. linux emule 编译 wx-config --libs,linux下编译wxwidgets所写程序所遇到的问题
  8. js导出的xlsx无法打开_js-xlsx实现文件导出、下载(excel)
  9. 无监督学习与有监督学习的本质区别是什么_吴恩达老师课程笔记系列第三节-无监督学习定义...
  10. 插入顶部_声屏障顶部斜插式安装可获得10-25dB的降噪量