【问题标题】:Why does std::span lack size_type?为什么 std::span 缺少 size_type?
【发布时间】:2019-08-08 02:33:59
【问题描述】:

我一直在将使用自制 span 类的旧代码更新为更符合 C++20 std::span 的代码,但由于 std::span 没有 size_type 而出现编译错误而是有index_type。关于 index_type 是否应该签名的问题一直存在巨大的争议,但为什么要跳过 size_type 呢?这破坏了期望容器(或类似容器的对象)具有size_type 的通用代码。

【问题讨论】:

  • proposal 为此在 R2 中添加了 difference_type,因此我怀疑添加 size_type 的提议对于 C++20 来说是公平的。
  • 这可能是最好的答案,克里斯
  • @Lyberta ... 什么?我只是想问一下您实际上使用 X::size_type 是为了什么 - 我认为我以前从未见过这样的代码,所以我试图了解这个问题的动机。
  • @Lyberta:“在包装容器时,您通常会暴露它们的类型。span 非常不是容器。期望类似容器行为的代码可能会以编译器无法检测到的方式失败。 size_type 的存在与否与这些错误无关。
  • string_viewsize_type 因为string 有; string_view 的设计意图是作为 string const& 类型函数参数的直接替代品。 不是span 的意图是替代vector const& 类型的参数。

标签: c++ c++20 std-span


【解决方案1】:

最初的提案P1022R0,当它被称为array_view时,有一个size_type成员。作为简化的一部分,它在第一个修订版P1022R1 中被删除,因为当时不需要它,因为size() 和元素访问使用签名的index_type(又名ptrdiff_t)。在 Kona 2019 会议上,P1227R2 更改了该决定,将 index_type 更改为 size_t

【讨论】:

  • 他们确实把它改成了size_t?耶!我坚决支持永远不应该签署尺寸。
【解决方案2】:

Nevin 所说的一切......并且已在 Belfast 中修复。

【讨论】:

  • 具体来说,P1872R0 被批准了。
猜你喜欢
  • 2020-10-26
  • 2020-06-23
  • 2022-10-02
  • 1970-01-01
  • 2018-02-18
  • 2019-01-17
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多