提问人:wreckgar23 提问时间:4/2/2019 更新时间:2/15/2020 访问量:177
为什么“boost::lower_bound”按值进行论证?
why does `boost::lower_bound` take its argument by value?
问:
Range 2.0 中(在此处找到)的实现按值获取其参数。boost::lower_bound
为什么会这样? 通过 const ref 获取其论点 - 请参阅此处std::lower_bound
答:
1赞
P.W
4/3/2019
#1
虽然很难确定其原因,但有两件事需要牢记:
按值传递的一般原因是当您最终在函数中创建副本时。此外,按值传递可能会调用 prvalues/xvalues 上的移动构造函数和左值上的复制构造函数。
在最新版本的 boost 库中,在其实现中使用。Boost 1.59 对链接中提到的重载有以下实现:
boost::lower_bound
std::lower_bound
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);
}
评论
1赞
P.W
4/3/2019
@wreckgar23:所以,第二点在这里无关紧要。让我们看看其他人是否可以为此提供更完整的答案。
1赞
wreckgar23
2/15/2020
#2
按价值来论证可能有历史原因。请参阅此答案,了解通过值传递给标准算法的函数对象。
评论