“viewable_range”概念有什么意义?

2023-12-23

[范围.细化] https://eel.is/c++draft/range.refinements

viewable_range 概念指定了可以安全转换为视图的范围类型的要求。

它的强制实施大致规定range进一步满足viewable_range如果其中之一

  1. 这只是一个视图,例如std::string_view, or
  2. 它是一个左值引用(即使它的引用删除类型不是视图),例如std::vector<int>&, or
  3. 它是可移动对象类型(即不是引用类型),例如std::vector<int>

我的问题是:

  1. 这个概念体现了什么想法?具体来说,它的实例如何“安全地转换为视图”以及为什么我想要这样的转换?这里的“安全”到底意味着什么?
  2. 你经常使用吗viewable_range限制通用参考? (即唯一的机会T被推导为左值引用类型。)这是标准范围适配器(闭包)对象的情况。
  3. 范围适配器(闭包)对象被修改为采用range作为 C++23 中的第一个参数。还有其他用途吗viewable_range从那时起的概念?
  4. 对于应用程序开发,何时使用viewable_range代替view or range?

这个概念体现了什么想法?具体来说,它的实例如何“安全地转换为视图”以及为什么我想要这样的转换?这里的“安全”到底意味着什么?

任意范围can只需执行以下操作即可将其转换为视图:

template <input_range R>
auto into_view(R&& r) {
    return ref_view(r);
}

但这并不是一个好主意。如果我们有一个右值范围(无论它是否是视图),那么现在我们正在引用它,因此如果我们保留结果视图太久,这可能会悬而未决。

一般来说,我们不想保留对view是 - a 的点view范围适配器通过值而不是引用来保存它们。但一般来说,我们不想按值保存非视图范围,因为复制这些范围的成本很高。

What viewable_range所做的是将范围集限制为我们可以转换为视图而无需额外担心悬空的范围:

  • views 应该总是按值 - 所以是左值view只是一个viewable_range如果它是可复制的。右值view总是一个viewable_range(因为views 必须是可移动的)。
  • an lvalue non-view范围始终是viewable_range因为我们采取ref_view在这种情况下。这当然有可能出现悬空,但我们采用左值,所以这是更安全的情况。
  • an rvalue non-viewrange 最初被拒绝(因为我们唯一的选择是ref_view在这种情况下我们不想引用),但将开始被捕获为owning_view (as of P2415 https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2415r2.html).

所以基本上,唯一不是可视范围的是左值不可复制视图,因为希望避免引用视图。

Do you always use viewable_range to constrain universal forwarding reference? (i.e. the only chance T to be deduced to lvalue reference type.) This is the case for standard range adaptor (closure) objects.

否。仅当您想要对转发引用执行的操作是将其转换为视图并存储结果视图时。范围适配器可以做到这一点,但算法不需要这样做 - 因此它们不应该使用该约束(标准库算法都不会这样做)。

在 C++23 中,范围适配器(闭包)对象被修改为将范围作为第一个参数。从那时起,viewable_range 概念还有其他用途吗?

The term范围适配器闭包对象很宽松,因为现在我们可以拥有用户定义的范围适配器闭包对象(P2387 https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2387r3.html),我们无法真正执行他们实际所做的事情。

但标准库范围适配器闭包对象仍然需要viewable_range(通过all_t).

对于应用程序开发,何时使用viewable_range代替view or range?

这实际上与(2)是同一个问题。如果您想要获取任何范围并将其转换为要存储的视图,您可以使用viewable_range- 所以当你编写范围适配器时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“viewable_range”概念有什么意义? 的相关文章

随机推荐

  • 在 R markdown 中混合文本和引用

    是否可以在 R markdown 文档中混合常规文本和引用 使它们看起来如下 作者 2018 方法 目前 我已经尝试过 Author2018 Methods 这使 Author 2018 Methods 和 Author2018 Metho
  • ZF + 原则 2:重型模型类还是轻量级模型 + 服务层?

    我正在整合Zend框架 and 学说2 我正在发现服务层 现在我明白 我错了吗 我有两种可能的架构 A model 其中类包含域逻辑 即属性 getter setter 复杂方法 A 轻量化模型 其中类包含属性 getters setter
  • 如何将 Lua 与 .Net 集成

    要求是用户应该能够在文本框中添加 Lua 脚本 然后我需要检查用户是否添加了正确的 Lua 脚本 如果脚本正确 那么我需要运行该脚本 有人可以建议我一些代码吗 我尝试了以下操作 using Lua state new Lua state D
  • viewWillAppear 期间静态 UITableViewCell 更改未反映在显示中

    我正在使用一些静态UITableViewCell在情节提要中配置为显示一些设置信息 如果关闭其他设置之一 则应禁用其他一些单元格 为了使细胞进入适当的状态 在viewWillAppear我从 NSUserDefaults 读取设置 然后相应
  • 需要写入 Program File 文件夹的自更新 .NET 客户端应用程序

    如同 如果路径受保护 请请求 Windows Vista UAC 提升 https stackoverflow com questions 17533 request vista uac elevation if path is prote
  • 将列数据映射到值 (Oracle)

    我有一个 Oracle 数据库 并且有一个名为Car 我可以选择Mileage像这样的汽车 SELECT MILEAGE FROM CAR 这给了我 100 500 1000 etc 但是 我希望 1000 以上的值标记为High其余的为L
  • 如何在spaCy中强制使用某个标签?

    我正在使用 spaCy 3 0 0rc2 与定制模型 不幸的是 我的训练数据的连字符 较少 因此连字符经常被标记为NOUN 有什么方法可以强制某些tag or pos 以确保all the 令牌被标记为PUNCT 基本上我正在寻找一个像在这
  • 如何处理 AOSP 存储库同步上的curl clone.bundle 错误

    从 AOSP 下载 master 分支后 出现以下错误 curl 22 The requested URL returned error 404 Not Found Server does not provide clone bundle
  • 如何使用机器人框架在多个 Facebook 页面上使用同一个机器人

    我有几个 Facebook 页面 我想在每个页面上运行相同的机器人 我正在使用机器人框架 现在一页的一切都完美运行 如何关联多个页面 当您调用 Facebook Send API 时 您通过access token范围 您可以通过修改此访问
  • 递归调用函数对象

    如何从函数对象内部调用函数对象 看来我不能使用this 例子 class factorial public int operator int n if n 0 return 1 return n n 1 我该放在什么地方 include
  • 对于如何使用 VB.NET 在 ASP.NET 中创建按钮单击事件,为什么选择私有与受保护?

    我从来没有认真思考过一些事情 但我很好奇并且想了解实际的推理 在 ASP NET 中使用VB NET 您可以通过 2 种不同的方式定义连接按钮单击事件 到 ASP NET 服务器控件 出于本次对话的目的 通过按钮属性手动连接 这里不讨论 双
  • Mongoose 聚合 $match 与 ids 不匹配

    我想按 ids 显示产品 56e641d4864e5b780bb992c6 and 56e65504a323ee0812e511f2 并显示减去折扣后的价格 如果有 我可以使用聚合来计算最终价格 但这会返回集合中的所有文档 如何使其仅返回匹
  • 为什么epoch太多会导致过拟合?

    我正在阅读 Python 深度学习 一书 读完第 4 章 对抗过度拟合 后 我有两个问题 为什么增加纪元数可能会导致过度拟合 我知道增加纪元数将涉及更多的梯度下降尝试 这会导致过度拟合吗 在对抗过拟合的过程中 准确率会降低吗 我不确定您正在
  • 动态加载脚本后访问变量

    首先 这个项目不使用 JQuery 我们有一些第三方 JavaScript 它又大又多 不需要经常使用 因此我们仅在需要时才动态加载它 function loadBigHairyCode var file document createEl
  • 是否可以在 TypeScript 中断言编译错误?

    例如 在 Scala 中 可以执行以下操作 ScalaTest assertDoesNotCompile val a String 1 assertTypeError val a String 1 assertCompiles val a
  • 是否建议在客户端使用Web SQL数据库进行存储[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • application/* Content-Type 和字符集属性

    The RFC 2616 https www ietf org rfc rfc2616 txt3 7 1 中规定 当发送方没有提供明确的字符集参数时 媒体 text 类型的子类型被定义为具有默认字符集 通过 HTTP 接收时的 ISO 88
  • CMake 的 CUDA 12 C++20 支持不起作用

    我正在尝试使用 CMake 3 25 在 Visual Studio 2022 的 CUDA 12 中启用新的 C 20 支持 如果我设置这些变量 set CMAKE CUDA STANDARD 20 works with 17 but n
  • 如何保证进程运行在特定的物理CPU核心和线程上?

    这个问题 https stackoverflow com questions 4664668 how to force two process to run on the same cpu询问确保两个进程在同一 CPU 上运行 使用sche
  • “viewable_range”概念有什么意义?

    范围 细化 https eel is c draft range refinements viewable range 概念指定了可以安全转换为视图的范围类型的要求 它的强制实施大致规定range进一步满足viewable range如果其