Компилятор C ++ только обеспечивает, что const
будет защищать члены этого объекта, а не другие объекты, на которые ссылаются косвенно (например, через указатель)._buf
является элементом указателя, и то, на что он указывает, не защищено компилятором.
Однако многие классы переопределяют на основе const
, чтобы также защитить доступ к связанным объектам.Чтобы сделать это, вы должны написать:
int & operator[](int i) { return _buf[i]; }
const int & operator[](int i) const { return _buf[i]; }
Это распространит const
на объекте до const
на подписанном элементе.