Вы делаете это так, чтобы String::const_reference
(то есть const String::CharProxy
), привязанный к возвращаемому значению []
, не становилось неожиданно зависшим, когда где-то еще изменяет этот конкретный String
.
Вы можете определить, что мутации лишают законной силы все ссылки, но это будет означать, что ваш класс String
будет непригодным для использования с широким диапазоном универсального кода и будет называться «Призрачное действие на расстоянии».Например, у вас есть код A, который сначала получает изменяемую ссылку из String
, затем код B принимает ссылку на const, а затем A мутирует по своей ссылке.Теперь ссылка на код B стала недействительной, и она не могла заранее проверить, что это произойдет.
Обратите внимание, что прокси-сервер возвращает значение char
на , поэтому никакие ссылки не могут выйти.