gpt4 book ai didi

c++ - 为什么这个程序使用 boost::ref

转载 作者:太空狗 更新时间:2023-10-29 20:43:02 30 4
gpt4 key购买 nike

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::refchat_message< 的拷贝 将被制作。因此,代码的作者似乎想要避免该拷贝(以实例化一个或两个 boost::ref 对象为代价)。如果 chat_message 很大或复制成本很高,这可能有意义。但是使用 boost::cref 会更有意义,因为原件是通过 const 引用传递的,调用不应修改传递的消息。

注意:以上适用于std::bindstd::tr1::bind

关于c++ - 为什么这个程序使用 boost::ref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16807577/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com