В случае std :: string, если мы обращаемся к элементу, где (element position) == (size of string)
стандарт говорит, что он возвращает ссылку на объект типа charT
со значением charT()
.
const_reference operator[](size_type pos) const;
reference operator[](size_type pos);
Ожидается: pos <= size().
Возвращает: * (begin() + pos), если pos <size(). В противном случае возвращает ссылку на объект типа charT со значением charT(), где изменение объекта на любое значение, отличное от charT(), приводит к неопределенному поведению.
http://eel.is/c++draft/strings#string.access-1
К сожалению, я не мог рассуждать об этом, было бы лучше, если бы это было неопределенное поведение.
Может кто-нибудь объяснить обоснование этого?