Take a look at this simple array class

```
class Array {
    const unsigned int _size;
    int _array[100];

public:
    Array() : _size(100) {
        for(unsigned int i = 0; i < _size; i++)
            _array[i] = 0;
    }

    int& operator[](unsigned int index) {
        cout << "normal operator[].\n";
        return _array[index];
    }

    const int& operator[](unsigned int index) const {
        cout << "const operator[].\n";
        return _array[index];
    }
};

int main()
{
    Array a;

    a[3] = 1;
    cout << a[3] << "\n";

    system("pause");
    return 0;
}

```

The "normal operator[]" line is executed twice, though I would expect the second call (`cout << a[3] << "\n";`) to be using the const version of the overloaded operator, because it doesn't change the array itself.

Why is that? Is there a way to force the const version to be called as I wish?