August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
程序中经常会用到常量。例如,一个与几何相关的程序会用到pi,一个英寸到厘米的转换程序会用到转换系数2.54。显然,常量名应该能够体现它的含义(例如,我们一般用pi,而不是3.14159)。而且,常量的值也不应该经常被改变。因此,在C++语言中提供了符号常量来表示那些在初始化后值就不再改变的数值量。例如:
常量对于维护程序的可读性具有重要作用。大部分人可能都知道3.14159表示的是pi,但299792458表示什么就没有多少人能猜到了。进一步讲,如果要求程序把pi的精度提高到12位有效数字,则需要改变程序中所有用到pi的语句。一种可行的方法是搜索程序中所有包含3.14的地方,但对于使用22/7来代替pi的语句就搜索不到了。因此,最好的方法是在程序中只有一个定义pi的语句,其他用到pi的语句都使用该常量。需要修改pi值的时候,只修改pi的定义语句即可:
因此,我们的建议是:除了个别情况(例如0和1),程序中应该尽量少用字面常量,而是尽可能地使用符号常量。在代码中,这种不能直接被识别的字面常量通常被戏称为魔术常量。
在一些情况下,例如在case语句中(4.4.1.3节),C++需要一个常量表达式,即仅由常量构成的整型值表达式。例如:
顺便说一下,299792458是一个基本的物理常量:它是光在真空中的传播速度,单位是米/秒。当你不知道这一点的时候,在代码中看到这个字面常量,肯定会犯糊涂。因此,要避免使用魔术常量。 ...