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. 基于Linux的嵌入式文件系统构建与设计

    摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...

  2. vue项目上传文件以及进度条

    最近做项目的时候,需要上传自定义镜像.并且附带进度条,上网查询一下资料,经过一番折磨,也总算做出来了,把自己写项目的内容给大家分享一下. 先直接贴代码吧 1.首先声明一个formData对象. 2.把 ...

  3. 面试:ios 批量上传图片

    这几天面试,被问到关于GCD的用法,想了想,之前项目好像确实用的比较少,只是知道怎么用,有思路,但是却从来没有试过,回来之后,就尝试写了下: 封装图片上传的方法 /**批量上传图片*/ + (NSUR ...

  4. sql按照汉字首字母顺序排序(桃)

    SELECT * FROM 表名 order by CONVERT(字段名 USING gbk)

  5. HDU4757 Tree(可持久化Trie)

    写过可持久化线段树,但是从来没写过可持久化的Trie,今天补一补. 题目就是典型的给你一个数x,和一个数集,问x和里面的某个数xor起来的最大值是多少. 最原始的是数集是固定的,只需要对数集按照高到低 ...

  6. jenkins下脚本权限问题

    在jenkins环境下,执行需要root权限的脚本,报错. 修改方法: 1. centos环境下,在/etc/sudoers.d/ 目录下,增加一个 jenkins文件,内容如下: Defaults: ...

  7. hdu 4541(麻烦的模拟)

    Ten Googol Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Su ...

  8. hdu 4970 树状数组 “改段求段”

    题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...

  9. getchar吸收回车

    #include "stdio.h" int main() { int a; char b,c; scanf("%d",&a); c = getchar ...

  10. Smpt命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first !

    刚发现以前做的QQ邮箱发送邮件不能用了,查找了下原因:未加( EnableSsl  SSL加密连接 )导致的,顿时觉得很坑,以前QQ邮箱也没有这个限制啊,可能是最近加的. 好吧不多说直接从头走起,照顾 ...