首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-17 
请教代码里引用的值为什么没被修改C/C++ codevoid print(const boost::system::error_code& /*e*/, boost:

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

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, ……

热点排行