c – 为什么这个程序使用boost :: ref
作者:互联网
The Ref library is a small library that is useful for passing
references to function templates (algorithms) that would usually take
copies of their arguments.
从http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/chat/chat_server.cpp
在
电话交付 –
void deliver(const chat_message& msg)
{
recent_msgs_.push_back(msg);
while (recent_msgs_.size() > max_recent_msgs)
recent_msgs_.pop_front();
std::for_each(participants_.begin(), participants_.end(),
boost::bind(&chat_participant::deliver, _1, boost::ref(msg)));
}
如果
void deliver(const chat_message& msg)
在另一个类中通过引用获取消息然后为什么使用boost :: ref?
解决方法:
boost :: bind生成其输入的副本,因此如果在这种情况下不使用boost :: ref,则会生成chat_message的副本.因此,代码的作者似乎想要避免该副本(以实例化一个或两个boost :: ref对象为代价).如果chat_message很大或者复制起来很昂贵,这可能是有意义的.但是使用boost :: cref更有意义,因为原始文件是通过const引用传递的,并且调用不应该修改传递的消息.
注意:以上内容适用于std :: bind和std :: tr1 :: bind.
标签:c,const,pass-by-reference,pass-by-value,boost-ref 来源: https://codeday.me/bug/20190831/1778997.html