为什么 iter_const_reference_t 不简单地使用 std::add_const_t ?

问题描述 投票:0回答:1

iterator_const_reference_t 实现如下:

template<std::indirectly_readable T>
using iter_const_reference_t = std::common_reference_t<const std::iter_value_t<T> &&,
                                                       std::iter_reference_t<T>>;

但是为什么呢?为什么不简单地说:

std::add_const_t<std::iter_reference_t<T>>

c++ std-ranges c++23
1个回答
0
投票

zip_view
的迭代器的引用类型,即
tuple<int&, int&>
,仅通过添加顶级
const
限定无法获得常量引用。

在这种情况下,我们需要使用

common_reference
tuple
的特化来生成
tuple<const int&, const int&>
,这就是
iter_const_reference_t
的公式。

© www.soinside.com 2019 - 2024. All rights reserved.