5.1  为什么需要常量

1)为了便于用户理解,增加程序的可读性。

2)在程序的很多地方都用到同一个常量,用某一个宏常量来定义可以减少错误。

规则:尽可能的使用含义直观明确的常量来表示程序中多次出现的数字或者字符串

5.2  #define  vs   const

     一般在C里面一般用#define,而在C++中,更喜欢用const,因为const有很多类型。而define没有类型检查这一说,只是单纯的进行字符替代。

规则:C++中,程序一般使用const常量而不使用宏常量,即const常量完全取代宏常量。

5.3  常量定义规则

规则:需要对外公开的,写在头文件里面,不需要的写在定义文件里面。 当然,有时候为方便管理,也可以存放在一个公共的头文件中。

规则:如果某一个常量与其他常量密切相关,应该在定义中包含这种关系,而不应给出一些孤立的值。

const float R = 100;

const float D = 2 * R;

5.4  类中的常量

      有时候,我们希望类中的某些数据成员也是常量,但#define 是全局的,不能达到目的。const 修饰也会改变数据成员的值。因为const只在某个对象的生存期内是常量,而对于整个类确是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。

      注意一点,我们不能在类声明中初始化const数据成员,因为类的对象未被创建之前,编译器不知道声明中的变量到底是多少。

      但是,我们可以在类的构造函数中实现数据成员的初始化。当然,这只是针对于某个对象而言的。在对象未被实例化之前,类是没有分配空间的。

class A

{

     enum{SIZE1 = 100, SIZE2 = 200;}//枚举常量

     int  array1[SIZE1];

     int  array2[SIZE2];

}

     枚举常量不会占用对象的存储空间,他们在编译时被全部求值。缺点是:只能表示整数值,且最大值有限,不可表示浮点数。

  

 

重读金典------高质量C编程指南(林锐)-------第五章 常量的更多相关文章

  1. 重读金典------高质量C编程指南(林锐)-------第七章 内存管理

    2015/12/10补充: 当我们需要给一个数组返回所赋的值的时候,我们需要传入指针的指针.当我们只需要一个值的时候,传入指针即可,或者引用也可以. 结构大致如下: char* p = (char*) ...

  2. 重读金典------高质量C编程指南(林锐)-------第一章 文件结构

    第一章  文件结构       C/C++程序通常由两个文件组成,一个文件保存程序的声明,称为头文件,.h 文件.一个保存程序的实现,称为定义文件.c文件. 1.1 版权与版本的声明 版权和版本的声明 ...

  3. 重读金典------高质量C编程指南(林锐)-------第六章 函数设计

    函数设计最重要的无外乎两个方面,一个是函数的接口设计一个是内部实现的一些规则. 在C语言中,函数的参数和返回值的传递方式分为两种: 值传递与指针传递.而C++中,多了一个引用传递. 引用传递有些像指针 ...

  4. 重读金典------高质量C编程指南(林锐)-------第四章 表达式和基本语句

    4.1 运算符的优先级   规则:如果代码行中的运算符比较多,可用括号确定操作顺序.if((a|b)&&(a&c)) 4.2   复合表达式 规则:不要编写太复杂的复合表达式 ...

  5. 重读金典------高质量C编程指南(林锐)-------第三章 命名规则

      3.1  共性规则 规则:标识符应该直观且可以拼读,可进行英语翻译. 规则:标识符的长度需要控制好,不应该太长. 规则:命名规则应该同操作系统或者开发工具等保持一致,比如大小写混用.AddChar ...

  6. 重读金典------高质量C编程指南(林锐)-------第二章 程序的板式

    2.1 空行 规则1:在每个类声明之后,每个函数定义结束之后加空行. 规则2:在某个函数体内,相关的不加空行,不相关的加空行. // 空行 void Function1(-) { - } // 空行 ...

  7. 《Linux命令行与shell脚本编程大全》 第十五章 学习笔记

    第十五章:控制脚本 处理信号 重温Linux信号 信号 名称 描述 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能 ...

  8. 安卓权威编程指南-笔记(第27章 broadcast intent)

    本章需求:首先,让应用轮询新结果并在有所发现时及时通知用户,即使用户重启设备后还没有打开过应用.其次,保证用户在使用应用时不出现新结果通知. 1. 一般intent和broadcast intent ...

  9. 安卓权威编程指南-笔记(第21章 XML drawable)

    在Andorid的世界里,凡事要在屏幕上绘制的东西都可以叫drawable,比如抽象图形,Drawable的子类,位图图形等,我们之前用来封装图片的BitmapDrawable就是一种drawable ...

随机推荐

  1. Codeforces 785D Anton and School - 2 (组合数相关公式+逆元)

    D. Anton and School - 2 time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  2. http长短连接和长短轮询

    http长连接 http长连接是指http的请求头和响应头的均有connection: keep-alive的请求,也就是客户端和服务端均为keep-alive的请求. 实际上,http是请求/响应式 ...

  3. Codeforces Round #361 (Div. 2) B bfs处理

    B. Mike and Shortcuts time limit per test 3 seconds memory limit per test 256 megabytes input standa ...

  4. 适配IPhone X的技巧

    #define TabbarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49) // ...

  5. BZOJ 4500: 矩阵

    4500: 矩阵 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 326  Solved: 182[Submit][Status][Discuss] De ...

  6. *LOJ#2306. 「NOI2017」蔬菜

    $n \leq 100000$种蔬菜,每个蔬菜有:一单位价格:卖第一单位时额外价格:总量:每天腐烂量.每天能卖$m \leq 10$单位蔬菜,多次询问:前$k \leq 100000$天最多收入多少. ...

  7. SQL2005、SQL2008如何压缩日志文件(log) 如何清除日志

    原文发布时间为:2010-11-01 -- 来源于本人的百度文章 [由搬家工具导入]            ALTER DATABASE [DataBaseName]             SET ...

  8. AVRStudio 6 添加调试功能

    下载这个文件并安装就可以了:http://avr-jungo-usb.software.informer.com/download/ 具体可以看这个贴子:http://electronics.stac ...

  9. 自己写的页面加载进度条jquery插件

    (function ($) { var progressId = "progress" + Math.round(Math.random() * 100) var progress ...

  10. Spring Boot学习——表单验证

    我觉得表单验证主要是用来防范小白搞乱网站和一些低级的黑客技术.Spring Boot可以使用注解 @Valid 进行表单验证.下面是一个例子. 例子说明:数据库增加一条Student记录,要求学生年龄 ...