为什么boost :: iterator_facade :: operator []和boost :: iterator_range :: operator []的返回类型不一致

时间:2018-10-04 03:16:40

标签: c++ boost

请参见http://coliru.stacked-crooked.com/a/b164340b70de1770

中的示例

boost::iterator_facade::operator[]定义为:

typename boost::detail::operator_brackets_result<Derived,Value,reference>::type
    operator[](difference_type n) const
{
    typedef boost::detail::use_operator_brackets_proxy<Value,Reference> use_proxy;

    return boost::detail::make_operator_brackets_result<Derived>(
        this->derived() + n
        , use_proxy()
    );
}

但是boost::iterator_range::operator[]被定义为:

reference operator[]( difference_type at ) const
{
    BOOST_ASSERT( at >= 0 && at < size() );
    return m_Begin[at];
}

现在存在问题,因为iterator_range::operator[]可能返回对iterator_facade::operator[]创建的临时对象的引用。例如,boost::reversed_range<const std::vector<int>>::operator[]具有这种行为。

我已阅读https://www.boost.org/doc/libs/1_68_0/libs/iterator/doc/iterator_facade.html#operator中的说明,但仍然无法理解。

0 个答案:

没有答案