下标运算符通常会定义两个版本,一个返回普通引用,一个是类的常量成员并返回常量引用避免改变值

class StrVec
{
public:
    std::string& operator[](std::size_t n)
        {
            return elements[n];
        }
    const std::string& operator[](std::size_t n) const
        {
            return elements[n];
        }
private:
    std::string *elements;
};