Следующий код работает отлично:Почему мы не можем иметь неизменный вариант оператора [] для отображения
std::map<int, int>& m = std::map<int, int>();
int i = m[0];
Но не следующий код:
// error C2678: binary '[' : no operator...
const std::map<int, int>& m = std::map<int, int>();
int i = m[0];
Большую часть времени я предпочитают, чтобы сделать большую часть моего материала, чтобы стать непреложным, из-за причины:
http://www.javapractices.com/topic/TopicAction.do?Id=29
Я смотрю на исходный код карты. Он имеет
mapped_type& operator[](const key_type& _Keyval)
Есть ли причина, почему станд :: карта не в состоянии обеспечить
const mapped_type& operator[](const key_type& _Keyval) const
Теперь, когда Roger Pate установил меня прямо на мой (теперь удаленный) неверный ответ, я нахожу вопрос гораздо интереснее - почему бы не '' const '' operator [] ', который бросает (или имеет неопределенное поведение) если запись отсутствует на карте? –
@ Майкл: Я полностью согласен. Я никогда не думал «ну просто использовать находку и проверку!» был большой частью ответа; это неуклюже. 'at' выдает исключение в' vector', почему cant 'operator [] const' выдает исключение в' map'? – GManNickG