에 대한 다음 코드는 잘 작동 :는 []지도
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];
을, I
http://www.javapractices.com/topic/TopicAction.do?Id=29
: 내 물건의 대부분 인해 이유로, 불변이 될 수 있도록하는 것을 선호 맵 소스 코드를 봅니다. 따라서이 const 멤버 함수가 될 수 없습니다, 키가 발견되지 않으면 할 수없는 표준 : :지도
const mapped_type& operator[](const key_type& _Keyval) const
이제 Roger Pate가 잘못된 답변을 내게 바로 설정 했으므로 더 흥미로운 질문을 던집니다. 왜 '연산자'의'const' 버전을 던지거나 (또는 정의되지 않은 동작을하는지) 엔트리가지도에 없다면? –
@ 마이클 : 나는 완전히 동의한다. 나는 "잘 사용하고 찾기 만하면!"이라고 생각한 적이 없다. 많은 대답이었습니다. 서투른입니다. 'at'가'vector'에 예외를 던졌습니다. 왜 cant' 연산자 [] const'가'map'에서 예외를 던집니까? – GManNickG