关于C++primer第四版中message示例中中const_iterator的疑问

void Message::put_Msg_in_Folders(const set &rhs)
{
for(std::set::const_iterator beg = rhs.begin();
beg != rhs.end(); ++beg)
(*beg)->addMsg(this); // beg points to a Folder
}
个人对(*beg)返回值理解为(string * const &),只是不知道对不对,只有这样才能修改rhs中Foler
所指向的对象。rhs为const对象,则rhs不可增加或减少元素个数,rhs的元素也应为const,可上面程序就是改变了元素值,不能求理解,大侠帮忙解释一下。

这是迭代器本身不能改变 但是它指向对象是可以改变的

常迭代器指向常亮,其实迭代器此时存的是此常亮的地址,而你对常迭代器取*就相当于对常对象内存空间里面重新赋值。

注意Const_iterator 跟 const iterator 是有区别的后者是迭代器只想不能变,前者是(底层实现)次迭代器指向容器范围内的元素之不能够被改变...
http://jingyan.baidu.com/article/25648fc1a4e8cb9190fd005b.html

如果理解常迭代器是一个指向const对象的指针,即"const classtype *“,这样就可理解为什么beg可以自增,而(*beg)不可以改变值。
这样,解引用迭代器beg则就应得到"const string *&"型指针,而不是"string *const &"。