Я видел много раз, что 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[]
для проверки границ?