我一直在阅读一本C ++书,发现了这两个功能:
int &Array::operator []( int subscript ) // first
{
//code
return ptr[ subscript ];
}
int Array::operator[]( int subscript ) const //second
{
//code
return ptr[ subscript ]; // value return
}
这个想法是创建一个Array对象并访问一些私有成员,例如:
Array myArray;
cout << myArray[ 2 ];
但是我没有得到这些函数之间的区别,基本上是因为每次我键入诸如“ cout << myArray [2]”之类的东西时,都会调用第一个函数。那么,第二个函数何时调用?第二个功能起作用吗?
答案 0 :(得分:4)
由于您要声明一个可变的Array
实例,因此将使用第一个函数。
您需要一个const
实例才能使用第二个实例:
const Array myArray;
// As this is const, only the second function can work
cout << myArray[2];
如果仔细阅读函数签名,第二个签名的末尾有const
,这意味着它适用于const
实例。通常,如果未定义任何非const
版本,则将运行该版本,但是当您竭尽全力制作另一个版本时,即称为该版本。
第一个函数允许突变,因为它返回了 reference 而不是副本:
myArray[2] = 5;
实际更改数组的位置。 const
版本不允许这样做,您将获得一个临时值。
答案 1 :(得分:0)
const 限定了函数中的 this 指针。因此,无法修改此函数中出现的成员变量。 const-qualified member functions对此提供了更多详细信息。