高质量C/C++编程指南--常量

此系列文章实为对《高质量程序设计指南--C++/C语言》的重点摘要总结

本篇总结的为常量


为什么需要常量?

这个问题可以换成为什么不直接使用数字或字符串:

  1. 会使程序的可读性变差。就算程序员自己都可能会忘记了那些数字或字符串是什么意思,更别说阅读者了(哪怕有注释)
  2. 在程序中多处引用同样的数字或字符,难免出现错误
  3. 如果需要修改,而同一数字或字符又在很多的地方被使用。这样会使工作量增大,而且还不能确保修改每一处都没有错误

const 与 #define 的比较

C++ 可以使用两者定义常量,但是前者优点更多

  1. 前者有数据类型,而后者没有。而编译器可以对前者进行类型安全检查,而对后者只是字符替换,没有安全检查
  2. 有些集成化的调试工具可以对 const 常量进行调试,但不能对宏常量进行调试

在C++中通常使用 const 完全替代宏常量


常量定义规则

  1. 需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中
  2. 如果某一常量与其他常量密切相关,应在定义中包含这种关系,而不是给出一些孤立的值 

例如: const   float   RADIUS = 100;

     const   float   DIAMETER = RADIUS * 2;


类中的常量

  1. 有些时候我们希望某些常量只在类中有效,而 #define 是全局性的,当然不能了。那么就使用 const 吧。可惜的是,const 数据成员是存在的,只是其含义不是我们所期望的。
  2. const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同对象其 const 数据成员的值可以不同。

那么怎样才能建立在整个类中都恒定的常量呢? 答案是使用 枚举常量

class test
{
    enum    { SIZE1 = 100,  SIZE2 = 200 };
    int    array1[SIZE1];
    int    array2[SIZE2];
};
枚举常量不会占用对象存储空间,它们在编译时被全部求值。

但是其存在一个缺点: 它的隐含数据类型是整数,其最大值有限,且不能表示浮点数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值