为什么 C++17 结构化绑定不使用 { }?

2024-03-12

我找到了 *C++ 结构化绑定的原始提案here http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0144r0.pdf。它提出了一种轻松绑定多个返回值的方法,即:

auto {a, b} = minmax(data);

但现在我看到每个人都指向 C++17/C++1z 提案语法

auto [a, b] = minmax(data);

现在我学会了“列表是这样写的”,有一个新的列表语法吗?为什么?这里的花括号有什么问题?


西班牙和美国的国家机构已提议改回{}语法因为 (P0488R0 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0488r0.pdf):

最初使用的“结构化绑定”提案 大括号“{}”来分隔绑定标识符。那些 分隔符改为括号“[]” 断言他们没有引入任何语法 问题。然而他们却介绍了 属性和 lambda 的语法歧义。在 根据各种建议的修复,看来 原来的语法更合适。

因此,仍然有可能最终拥有 C++17 的原始语法(我坚信大多数用户更喜欢这种语法)。


Update由此旅行报告 https://botondballo.wordpress.com/2016/11/25/trip-report-c-standards-meeting-in-issaquah-november-2016/:

分解声明的原始提案使用的语法auto {a, b, c};在上次会议上更改为auto [a, b, c]。这一更改颇具争议,一些评论要求将其改回{}(而其他人则鼓励保留[])。双方都有技术争论([]一旦开始允许嵌套分解,语法可能会与属性发生冲突;这{}如果您将概念混入其中并允许使用概念名称而不是统一初始化,则语法可能会与统一初始化发生冲突auto),所以最终这很大程度上取决于品味。 clang 实现者确实报告说他们尝试了这两种方法,并发现更容易解决歧义[]。最终没有达成改变的共识,所以现状([]语法)仍然存在。

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

为什么 C++17 结构化绑定不使用 { }? 的相关文章

  • 多个源的 makefile

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 如何在另一个应用程序中挂钩 api 调用

    我正在尝试挂钩另一个应用程序的 ExtTextOut 和 DrawTextExt GDI 方法调用 我知道我需要使用 GetProcAddress 来查找 gdi32 dll 中那些方法的地址 并用我的函数的地址覆盖我想要挂钩的进程中的地址
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 如何使用 NPOI 按地址(A1、A2)获取 Excel 单元格值

    我有一个 Excel 单元格地址 例如 A1 A2 如何使用 C 中的 NPOI 框架以编程方式访问此单元格 我找到的一些 Java POI 示例代码 CellReference cr new CellReference A1 row my
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • System.ArgumentException'jobobject' 不得为 IntPtr.Zero。参数名称:jobobject

    我收到一个错误 我无法理解 我在 void 方法中有这个简单的警报对话框生成器 private void startAction AlertDialog Builder builder builder new AlertDialog Bui
  • 如何使用 PowerShell 检查是否启用了 Hyper-V?

    我正在尝试编写一个 PowerShell 脚本来检查 Windows 可选功能以查看是否安装了 Hyper V 但是 我的代码不起作用 即使 Hyper V 已禁用 脚本也会输出它已启用的信息 Requires RunAsAdministr
  • 将 MySQL 服务器连接到 NetBeans

    我正在尝试在 Netbeans 中连接 MySQL 数据库 但停留在第一步 连接数据库 我的数据库在控制台上工作正常 尝试命令 mysqladmin u root p ping 它说 mysql id 还活着 我什至从控制台创建了数据库 现
  • 从 3D 平面到平行于图像平面的平面的单应性

    我有一张图像 其中场景中有一个校准目标 已知几何形状 假设桌子上有一个简单的 2 x 2 正方形 我想执行透视变换 使用warpPerspective 以便生成的图像是桌子的正交视图 就好像相机轴与桌子法线平行 计算单应性的标准过程是从一个
  • 从字符串中删除每个第 n 个元素

    如何删除字符串中的每第 n 个元素 我猜你会使用drop以某种方式发挥作用 就像这样删除第一个 n 你怎么能改变它 只删除第 n 个 然后是后面的第 n 个 依此类推 而不是全部 dropthem n xs drop n xs 简单的 取
  • 脚本在 上时不起作用

    我证明了剧本 它的作品 但在 我不擅长剧本 也许这是一个简单的问题 基本上 脚本只是显示 当鼠标悬停在图像上时 img1 mouseover functi
  • 字节顺序、“最高有效”和“最低有效”

    我在网上阅读了描述大端和小端的描述 然而 它们似乎基本上都以相同的方式读取 我仍然对 最多 和 最少 有效字节的实际实现感到困惑 据我了解 小端值首先评估 最低有效 值 而在大端值下 首先评估 最高有效 字节 但是 我不清楚 最 和 最不
  • 为什么类不能用作模块?

    Module是的超类Class Class superclass gt Module 在面向对象编程中 这意味着Class可以在任何有实例的地方使用Module可以使用 令人惊讶的是 情况并非如此ClassRuby 中的实例 class C
  • 使用字符串键访问或创建嵌套 JavaScript 对象而不使用 eval

    我正在寻找一个很好的解决方案来通过字符串值访问属性 但如果该属性不存在 则应该创建它 如果根结构已经定义了该结构的某些部分 则不应覆盖这些属性 而应合并这些属性 例如 如果您有一个空对象test并且您想在不使用 eval 的情况下设置深层结
  • 如何用
    $...$
    替换 LaTeX $...$ 和 $$...$$ 符号?

    我目前遇到的问题是 Jekyll 不能很好地与 Markdown 和 LaTeX 配合使用 所以我有很多文章 frac some latex or int e v en more 我该如何更换 by span span and by div
  • 匹配 ggplot2 中的图例项和颜色,其中某些 geom_segment 未包含在图例中

    我似乎无法让我的图例标签和颜色在 ggplot2 中正确匹配 我有一些 geom segments 我不想包含在图例中 我尝试了各种选择 但没有一个有效 现有的问题似乎都没有涉及未在绘图上标记某些元素的问题 所以这可能会增加复杂性 代码如下
  • 具有来自同一个表的 2 个外键的 Django 模型

    我想要一个带有来自同一个表的 2 个外键的 Django 模型 这是一个事件表 有两列员工 参与者 和 接收者 但我收到这个错误 错误 一个或多个模型未验证 tasks task 中介 模型 TaskEvent 有多个 Employee 外
  • Tcl.h:没有这样的文件或目录

    我正在尝试将一些代码从 Solaris 机器移植到 Linux 特别是 Redhat 机器上 代码编译没有问题 并且在 Solaris 机器上运行也没有问题 然而 在 Linux 上重新编译时 我遇到了 tcl h 的问题 编译器告诉我 e
  • JCL TEvaluator 类中预定义了哪些函数

    有谁知道其中包含哪些预定义功能 例如 ABS 功能 TEvaluatorDelphi 7 的 JCL 类 没有任何标准功能Math pas包括 默认评估解析器中实现的所有内容都是运算符or xor and not mod lt gt lt
  • 使用 python 3 抓取需要登录的网站

    只是一个关于一些抓取身份验证的问题 使用BeautifulSoup importing the requests lib import requests from bs4 import BeautifulSoup specifying th
  • 如何通过CSS将鼠标悬停在导航菜单上来隐藏和显示Bootstrap 4卡片?

    您好 我试图通过将鼠标悬停在菜单列表上来显示和隐藏卡片的特定部分 我可以使用 css 隐藏卡片 但无法通过特定类的 css 的 display block 属性来显示它 HTML 导航菜单 div class d flex justify
  • ctags 和 Fortran 的接口

    我想知道如何让 ctags 使用 Fortran 中的接口 例如 INTERFACE SOME ROUTINE MODULE SOME ROUTINE A MODULE SOME ROUTINE B END SOME ROUTINE 因此
  • 将数据从钩子传递到 codeigniter 中的视图

    我可以将数据从钩子传递到视图吗 如果可能 请解释一下 例如 hook post controller constructor array class gt Varify user function gt user project filen
  • NUnit Assert.Equals 我错过了什么?

    Assert Equals 从不调用 Equals operator operator 我错过了什么吗 我已经实现了 IEquatable 但在使用 nunit 时仍然从未调用这些方法 if objectA objectB Assert F
  • 为什么 C++17 结构化绑定不使用 { }?

    我找到了 C 结构化绑定的原始提案here http www open std org jtc1 sc22 wg21 docs papers 2015 p0144r0 pdf 它提出了一种轻松绑定多个返回值的方法 即 auto a b mi