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