IceStudent std::map это бинарное дерево. operator [] это просто сахар. q_q Меня никто не гипнотизировал. Я просто не понимаю, почему не сделано то, что можно было сделать. На счет питфолов я уже сказал - можно выкинуть ошибку, это будет вполне законно и предсказуемо.
_DEN_ Мне кажется, не сделано, чтобы не вносить путаницы: для перегрузки только по const это слишком большая разница в семантике.
_DEN_ ИМХО: operator[] вроде никогда не генерирует исключения (только при нехватке памяти или из-за пользовательского конструктора). Поэтому и здесь не стали делать исключение, просто запретили данную функцию. Хотя с точки зрения удобства это, безусловно, большой минус map'ов. q_q Всё это только мои предположения, частично основанные на исходниках STL. Вообще, на эту тему наверняка что-то написано в книгах, но сейчас у меня нет времени
IceStudent "доступ к произвольному элементу" - это традиционное понимание работы квадратных скобочек, а "наращивая ... если запрашиваемого элемента не оказалось" - это бонус, в традиционной модели следует ожидать out of range. _DEN_ почему не сделано то, что можно было сделать А нужно ли? Согласуется ли это с парадигмой map? Какую цену (не каждый согласится на "можно выкинуть ошибку") придется заплатить за желание получить традиционные квадратные скобки? Востребован ли вообще этот оператор для контейнера map или следует заменить не константную версию на map::update и не путать программистов?