请问代码里引用的值为什么没被修改

请教代码里引用的值为什么没被修改
C/C++ code
void print(const boost::system::error_code& /*e*/, boost::asio::deadline_timer* dt_ptr, int& count)
{  
    if (count < 5) 
    {    
        std::cout << count << " " << std::endl;    
        ++count;
        dt_ptr->expires_at(dt_ptr->expires_at() + boost::posix_time::seconds(1));
        dt_ptr->async_wait(boost::bind(print, boost::asio::placeholders::error, dt_ptr, count));
    }
}

int main()
{
    boost::asio::io_service io_ser;    
    int count = 0;
    boost::asio::deadline_timer dt(io_ser, boost::posix_time::seconds(1));

    dt.async_wait(boost::bind(&print, boost::asio::placeholders::error, &dt, count));
    io_ser.run();

    std::cout << "final count is " << count << " "; // 这里输出还是0,为什么呢

    return 0;
}


------解决方案--------------------
关键在boost::bind上面。
你可以将 dt.async_wait(boost::bind(&print, boost::asio::placeholders::error, &dt, count));
改为 dt.async_wait(boost::bind(&print, boost::asio::placeholders::error, &dt, boost::ref(count)));
因为boost::bind在包装时是把参数拷贝过去以后才传给函数的,即boost::bind使用了传值调用,而boost::ref就是为了解决这个问题的。显然ref是reference的缩写。
------解决方案--------------------
探讨

关键在boost::bind上面。
你可以将 dt.async_wait(boost::bind(&amp;print, boost::asio::placeholders::error, &amp;dt, count));
改为 dt.async_wait(boost::bind(&amp;print, boost::asio::placeholders::error, &amp;dt, ……