gpt4 book ai didi

c++ - 为什么有变异的 Boost.Range 算法的 const 重载?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:05 24 4
gpt4 key购买 nike

Boost.Range 的文档(和实现)显示了以常量引用作为参数的变异算法的重载。例如Boost.Range's Sort documentation显示:

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 的一部分会很好)。

最佳答案

template<class T>
struct span_t {
T* b =0;
T* e =0;
T* begin() const { return b; }
T* end() const { return e; }
std::size_t size() const { return end()-begin(); }
bool empty() const { return size()==0; }
T& operator[](std::size_t i) const { return b[i]; }
span_t()=default;
span_t(span_t const&)=default;
span_t& operator=(span_t const&)=default;
span_t( T* s, T* f ):b(s),e(f) {}
span_t( T* s, std::size_t l):span_t(s, s+l) {}
};

这是一个(实用且有用的)随机访问范围。

它的所有方法(operator= 除外)都是const。您可以对其进行排序。

并非所有范围都将 const 从范围传播到范围中的元素。

关于c++ - 为什么有变异的 Boost.Range 算法的 const 重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44264968/

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