请问:const成员函数,隐式调用

请教:const成员函数,隐式调用
近读侯捷先生译的《C++标准程序库》(华中科技大学出版),第五章讲function   objects的地方,有点不理解,代码如下(可正常编译执行):

#include   <iostream>
#include   <list>
#include   <algorithm>
using   namespace   std;

class   AddValue
{
            private:
                            int   theValue;
            public:
                          AddValue(int   v):theValue(v){}
                          void   operator()(int   &elem)   const{   elem   +=   theValue;   }   //这个地方的const  
};

int   main()
{
            list <int>   coll;

            for   (int   i=1;i <=9;++i)
                            coll.push_back(i);
            for_each   (coll.begin(),coll.end(),AddValue(10))       //这个地方怎么调用的
                            ;
            list <int> ::const_iterator   pos;
            for   (pos=coll.begin();pos!=coll.end();++pos)
                    cout   < <   *pos   < <   '   ';
}


想不明白,void   operator()(int   &elem)   const   {....}定义为   const   成员函数,那么函数体内不该修改   调用该函数的   对象内的数据成员,这个理解没错吧。

for_each   (coll.begin(),coll.end(),AddValue(10))     中的   AddValue(10)可是个隐式调用?其调用对象是   coll   中的   一个   int   数据成员,按说   const   函数是不该修改   coll中的数据成员的,这里怎么可以修改呢:elem   +=   theValue  

请达人帮忙解释一下,谢谢

------解决方案--------------------
AddValue是个函数对象
------解决方案--------------------
修改的不是自身成员,而是传入的参数
------解决方案--------------------
elem是个l-value
------解决方案--------------------
想不明白,void operator()(int &elem) const {....}定义为 const 成员函数,那么函数体内不该修改 调用该函数的 对象内的数据成员,这个理解没错吧。

你的理解没错


for_each (coll.begin(),coll.end(),AddValue(10)) 中的 AddValue(10)可是个隐式调用?其调用对象是 coll 中的 一个 int 数据成员,按说 const 函数是不该修改 coll中的数据成员的,这里怎么可以修改呢:elem += theValue


并不能说是隐式调用吧,只能说是用一个临时对象来调用这个operaotr(),而且它并没有修改数据成员theValue ,它是elem += theValue ,theValue 并没有被修改啊,修改的是elem这个参数而已
------解决方案--------------------
想不明白,void operator()(int &elem) const {....}定义为 const 成员函数,那么函数体内不该修改 调用该函数的 对象内的数据成员,这个理解没错吧。
===================================
theValue才是数据成员哦..修改的elem只是一个参数..
------解决方案--------------------
上面都说了,这个函数并没有修改类的数据成员啊....