August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
对于有些变量,我们希望它们可以被改变——这也是为什么我们称之为“变量”的原因。但对于另外一些变量,我们则不希望改变它们。即,我们想用“变量”表示的实际上是不变量。我们通常称它们为常量(constant,或者简写为const)。考虑下面代码:
在这里,我们希望d是可变的,start_of_term是不可变的,而some_function()将不被允许对start_of_term进行更改。编译器是如何知道这些的呢?这是因为我们将start_of_term定义为const,从而使编译器获得了上述信息。好了,我们达到了预期的目的,但是,为什么用day()来读取start_of_term的成员day是被允许的呢?实际上,根据前面给出的Date的定义,start_of_term.day()是错误的,因为编译器不知道day()是否修改了对象的日期。我们没有给出过这方面的任何信息,因此编译器应该假定day()有可能改变日期,并报告一个错误。
我们可以将类操作划分为两类——可更改和不可更改,这样就可以解决这个问题了。这个语言特性对于我们深入理解类是非常重要的,而且它也具有很重要的实践意义:不修改对象的操作可以在常量对象上调用。如下例:
在一个成员函数声明中,我们将const放置参数列表右边,就表示这个成员函数可以在一个常量对象上调用。一旦将一个成员函数声明为const,编译器会帮助我们保证这个成员函数不会修改对象。例如: ...