编程语言
首页 > 编程语言> > c – 为什么这个程序使用boost :: ref

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