首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么类型的__iter_concept<_Iter>

什么类型的__iter_concept<_Iter>
EN

Stack Overflow用户
提问于 2021-06-19 12:47:26
回答 2查看 109关注 0票数 2

我看了std::random_access_iterator和其他迭代器的概念

这就是GCC的实现方式。

代码语言:javascript
复制
template<typename _Iter>
    concept random_access_iterator = bidirectional_iterator<_Iter>
      && derived_from<__detail::__iter_concept<_Iter>,
              random_access_iterator_tag>
      && totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter>
      && requires(_Iter __i, const _Iter __j,
          const iter_difference_t<_Iter> __n)
      {
    { __i += __n } -> same_as<_Iter&>;
    { __j +  __n } -> same_as<_Iter>;
    { __n +  __j } -> same_as<_Iter>;
    { __i -= __n } -> same_as<_Iter&>;
    { __j -  __n } -> same_as<_Iter>;
    {  __j[__n]  } -> same_as<iter_reference_t<_Iter>>;
      };

__iter_concept<_Iter>是如何衍生出from random_access_iterator_tag的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-19 13:30:03

__iter_concept<_Iter>是如何从random_access_iterator_tag中衍生出来的?

因为这是写出来的。__iter_concept不是一个概念;它是一个类型(或类型别名)。C++20指定一组规则,用于从实现C++20 concept-ified迭代器类别的有效迭代器中确定迭代器类别(前向、随机访问、输入等)。这些规则的名称令人困惑地命名为"概念“。

这里的“概念”一词指的是在计算中使用C++20概念规则,而不是C++17预概念规则。

__detail::__iter_concept<T>是GCC标准库中实现ITER_CONCEPT的模板元编程类型。于是就得名了。它生成从ITER_概念定义类型继承的类型,以便使用它的概念可以使用derived_from来检测迭代器类型。

票数 1
EN

Stack Overflow用户

发布于 2021-06-19 13:46:26

___Capital开始的符号保留给您的c++编译器和std库,以便用于内部实现详细信息。(除非编译器明确允许,否则标准禁止在其他任何地方使用此类符号)。

因此,模板是用于实现该概念的C++标准要求的一些内部实现细节。

代码语言:javascript
复制
__detail::__iter_concept<_Iter>

这是std库内部实现获取给定类型的标记的方法。它可能在std标头的其他地方被定义为C++代码。它的工作原理,我会阅读源代码。或者更确切地说,我只是假设它会照它说的去做。

天真的方法就是使用std iterator_traits

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68046909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档