C ++中const和非const函数之间的区别

时间:2019-07-04 23:42:04

标签: c++

我一直在阅读一本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]”之类的东西时,都会调用第一个函数。那么,第二个函数何时调用?第二个功能起作用吗?

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对此提供了更多详细信息。

相关问题