Законно ли изменить результат std :: string :: op []?

Рассмотрим следующее из 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 [] , или нет? Разве это не двусмысленная формулировка?

23
задан Lightness Races with Monica 6 August 2013 в 11:21
поделиться