August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
到目前为止,operator[]()的定义存在一个问题:它不能用于const vector对象。例如:
其原因在于我们的vector::operator[]()可能会潜在地改变vector对象。即使它实际上没有改变,编译器仍会认为这是一个错误,因为我们“忘了”将这一情况告诉编译器。解决方法是再定义一个const成员函数(参见9.7.4节)的版本。这很容易实现:
对const版本,我们显然不能返回一个double&,而应返回一个double值。返回一个const double&的效果是一样的,但由于double只是一个很小的对象,没有必要返回引用(见8.5.6节),因此我们决定以传值方式返回它。现在,我们可以编写如下代码:
由于vector对象常常通过const引用的方式传递,因此为operator[]()实现const版本是十分必要的。