Рассмотрим следующее из C ++ 11:
[C ++ 11: 21.4.5]:
basic_string
доступ к элементу [string.access]const_reference operator [] (size_type pos) const; ссылочный оператор [] (size_type pos);
1 Требуется:
pos <= size ()
.2 Возвращает:
* (begin () + pos)
, еслиpos
, в противном случае ссылка на объект типа T
со значениемcharT ()
; указанное значение не должно изменяться.3 Выдает: Ничего.
4 Сложность: постоянное время.
Это означает либо:
pos == size ()
не должно изменяться, либо op []
не должен изменяться даже для перегрузки, отличной от const
. Второй сценарий кажется совершенно нелепым, но я думаю, что его формулировка явно подразумевает именно его.
Можем ли мы изменить то, что получаем из std :: string :: op []
, или нет? Разве это не двусмысленная формулировка?