Цитата(Алексей1153 @ 10.12.2012, 16:00)
CONSTref - константный указатель на контейнер. Стало быть содержимое контейнера тоже должно быть недоступно для изменения через эту ссылку. Но:
typedef std::map<int,int*> td_map;
td_map m;
m[0]=new int(7);
const td_map& CONSTref=m;
int* pointer1=CONSTref[0]; //ругается, как и должно быть
int* pointer2=CONSTref.begin()->second; //фокус: прокатывает :)
Все правильно, сам second является частью td_map и его нельзя изменить, а указывает он на значение типа int, которое не является частью td_map, и его можно менять сколько душе угодно.
Можно даже вызывать у такого объекта не константные методы, если вместо указателя на int хранить указатель на объект какого-либо класса.
А вот, если объекты не должны изменятся через map, то хранить нужно константные указатели на них.
typedef std::map<int,const int*> td_map;
но об этом уже писали.