Boost.Range 的文档(和实现)显示了以 const refs 作为参数的变异算法的重载。例如Boost.Range 的 Sort 文档显示:
template<class RandomAccessRange>
RandomAccessRange& sort(RandomAccessRange& rng);
template<class RandomAccessRange>
const RandomAccessRange& sort(const RandomAccessRange& rng);
template<class RandomAccessRange, class BinaryPredicate>
RandomAccessRange& sort(RandomAccessRange& rng, BinaryPredicate pred);
template<class RandomAccessRange, class BinaryPredicate>
const RandomAccessRange& sort(const RandomAccessRange& rng, BinaryPredicate pred);
重载 2 和 4 的意义何在?当然,能够通过临时工是件好事,但随后const&
使这一点变得毫无意义。Rvalue-references 将是最受欢迎的,但我的理解是它们对 Boost.Range 的支持过于侵入性,并且“推迟”到 Range.V3 的采用(如果同时它是 Boost 的一部分,那就太好了)。