为什么"boost::lower_bound"按值获取其参数?

why does `boost::lower_bound` take its argument by value?

本文关键字:quot 获取 参数 boost lower 为什么 bound      更新时间:2023-10-16

范围 2.0 中boost::lower_bound的实现(在此处找到)按值获取其参数。

这是为什么呢?std::lower_bound通过 const ref 获取其论点 - 见这里

虽然很难确定其原因,但要记住两件事:

  • 按值传递的一般原因是当您最终在函数中创建副本时。此外,按值传递可能会调用 prvalues/xvalues 上的移动构造函数和左值上的复制构造函数。

  • 在最新版本的 boost 库中,boost::lower_bound在其实现中使用std::lower_bound。Boost 1.59 针对链接中提到的boost::lower_bound重载具有以下实现:

template< class ForwardRange, class Value >
inline BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type
lower_bound( const ForwardRange& rng, Value val )
{
BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
return std::lower_bound(boost::begin(rng), boost::end(rng), val);
}
template< range_return_value re, class ForwardRange, class Value >
inline BOOST_DEDUCED_TYPENAME range_return<const ForwardRange,re>::type
lower_bound( const ForwardRange& rng, Value val )
{
BOOST_RANGE_CONCEPT_ASSERT(( ForwardRangeConcept<const ForwardRange> ));
return range_return<const ForwardRange,re>::
pack(std::lower_bound(boost::begin(rng), boost::end(rng), val),
rng);
}

此问题现已修复。

按价值来看待论点可能有历史原因。 请参阅有关按值传递给标准算法的函数对象的答案。