1、摘要:
程序设计并非魔数,所以不要故弄玄虚:要避免在代码中使用诸如42和3.14159这样的文字常量。它们本身没有提供任何说明,并且因为增加了难于检测的重复而使维护更加复杂。可以用符号名称和表达式替换它们,比如width * aspectRatio。
2、讨论:
名称能够增加信息,并提供单一的维护点,而程序中到处重复的原始数据是无名的,维护起来很麻烦。常量应该是枚举符或者const值,有合适的作用域和名称。
经常会有此42可能非彼42的情形。更糟的是,如果程序员进行了一些心算(比如,”这个84是由5行代码前所用的42乘以2得到的“),那么以后需要用其他常量替换42的工作会变得既枯燥又易错。
应该用符号常量替换直接写死的字符串。将字符串与代码分开(比如将字符串放入一个专门的.cpp文件或资源文件中),这样非程序员也能对其进行审查和更新,而且能够减少重复,还有助于国际化。
3、示例:
例1 重要的特定于领域的常量应该放在名字空间一级。
const size_t PAGE_SIZE = 8192, WORDS_PER_PAGE = PAGE_SIZE / sizeof(int), INFO_BITS_PER_PAGE = 32 * CHAR_BIT;
例2 特定于类的常量。可以在类定义中定义静态整数常量,其他类型的常量需要单独的定义或者一个短小的函数。
//文件 widget.h class Widget { static const int defaultWidth = 400 //声明中提供的值 static const double defaultPercent; //定义中提供的值 static const char* Name(){return "Widget";} }; //文件 widget.cpp const double Widget::defaultPercent = 66.67; //定义中提供的值 const int Widget::defaultWidth; //所需的定义