在什么情况下调用常量取消引用运算符?

Under what condition is the constant dereferencing operator called?

我有一个简单的class

class Array
{
public:
    Array();
    ~Array();

    // Dereferencing operators
    int operator[](std::size_t index) const;
    int& operator[](std::size_t index);
}

我的问题是,int operator[](std::size_t index) const是在什么条件下被调用的?如何强制 C++ 调用 int operator[](std::size_t index) const 而不是 int& operator[](std::size_t index)?如果我只实现其中一个运算符会怎样?

My question is, under what condition is int operator[](std::size_t index) const called?

在常量数组实例上调用时

How can I force C++ to call int operator[](std::size_t index) const instead of int& operator[](std::size_t index)?

将数组的可变实例转换为常量引用

What would happen if I only implement one of the operators?

如果只实现 const,将无法使用 operator[] 写入下标。

如果只实现非常量,将无法读取数组的 const 实例的下标。