Я видел много раз, что std::string::operator[] не выполняет никаких ограничений. Даже В чем разница между строкой:: at и string:: operator []?, заданной в 2013 году, ответы говорят, что operator[] не выполняет никаких проверок границ.
Моя проблема в том, что если я посмотрю на стандарт (в данном случае проект N3797) в [string.access], у нас есть
const_reference operator[](size_type pos) const; reference operator[](size_type pos);
- Требуется:
pos <= size().- Возвращает:
*(begin() + pos), еслиpos < size(). В противном случае возвращается ссылка на объект типаcharTсо значениемcharT(), где изменение объекта приводит к поведению undefined.- Броски: ничего.
- Сложность: постоянное время.
Это заставляет меня думать, что operator[] должен выполнить некоторую проверку границ, чтобы определить, нужно ли возвращать элемент строки или значение по умолчанию charT. Правильно ли это предположение, и теперь требуется operator[] для проверки границ?