这实际上是模棱两可的吗?

2024-03-14

所以我知道代码中的大括号不仅仅意味着initializer_list: 如果不是initializer_list,大括号括起来的列表是什么? https://stackoverflow.com/q/37682392/2642059

但他们应该做什么default to?

例如,假设我定义了一个重载函数:

void foo(const initializer_list<int>& row_vector) { cout << size(row_vector) << "x1 - FIRST\n"; }
void foo(const initializer_list<initializer_list<int>>& matrix) { cout << size(matrix) << 'x' << size(*begin(matrix)) << " - SECOND\n"; }

If I call foo({ 1, 2, 3 }) the 1st will obviously be called. And if I call foo({ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }) the 2nd will obviously be called.

但是如果我打电话怎么办:

foo({ { 1 }, { 2 }, { 3 } })

是那些嵌套的大括号吗int-初始化器或initializer_list<int>初始化器?gcc 说它不明确 http://ideone.com/3DsWe7但是如果你使用该代码并运行它http://webcompiler.cloudapp.net/ http://webcompiler.cloudapp.net/Visual Studio 表示它只是构建一个initializer_list<int>。谁是对的?这里应该有一个默认值吗?


规则是在[over.ics.list] http://eel.is/c++draft/over.ics.list:

否则,如果参数类型是std::initializer_list<X>并且初始化列表的所有元素都可以隐式转换为X,隐式转换序列是将列表元素转换为所需的最差转换X,或者如果初始值设定项列表没有元素,则进行恒等转换。

在这两个重载中,最糟糕的必要转换是身份转换。所以我们有两个具有等级同一性的隐式转换序列。有一个规则在[超过匹配最佳] http://eel.is/c++draft/over.match.best#over.ics.rank-3它更喜欢列表初始化std::initializer_list<X>超过替代品(所以std::initializer_list<int>优先于int for {1}),但没有任何迹象表明该规则应该递归应用。

由于没有任何东西可以消除两个转换序列的歧义,因此该调用是不明确的。 gcc 和 clang 拒绝是正确的。

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

这实际上是模棱两可的吗? 的相关文章

  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • 从接口调用“IsAssignableFrom”不会返回具体类

    我试图返回实现下面代码中定义的接口的类的对象类型 linq 语句仅返回接口本身 因此控制台输出只是 可分配实验 IRule 为什么不返回具体类 using System using System Linq namespace Assigna
  • 调用事件,h(args) 与 EventName?.Invoke()

    我总是这样调用事件 void onSomeEvent string someArg var h this EventName if h null h this new MyEventArgs someArg 今天 VS 2015 告诉我这可
  • 使用 stringstreams 将字符串转换为 __uint128_t

    我正在尝试从字符串中提取不同类型的数据 void readHeader char buf BUFFSIZE std istringstream hdr buf uint128 t id client hdr gt gt id client
  • 如何利用磁盘 IO 队列

    我需要从 3 7 GB 文件中读取小数据序列 我需要阅读的职位是不相邻 但我可以命令 IO 以便从头到尾读取文件 该文件存储在 iSCSI SAN 上 该 SAN 应该能够处理 优化排队 IO 问题是 如何一次性请求我需要的所有数据 位置
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 尝试使用指向 ODBC DSN 的连接字符串时出现关键字不支持异常

    我为我的 Asp Net MVC 应用程序的数据库访问创建了一个 ODBC DSN 主要原因之一是它可以轻松地将数据库凭据 例如服务器地址 端口 用户名和密码 置于源代码控制之外 而不会妨碍我的发布能力 所以我将连接更改为DSN MyDSN
  • 如何混淆整数?

    我需要从 C 中的整数列表生成唯一值的列表 我以为是 MD5 或类似的 但它们生成了太多字节 整数大小为 2 个字节 例如 我想获得单向通信 0 gt ARY812Q3 1 gt S6321Q66 2 gt 13TZ79K2 因此 在证明哈
  • 如何检查特定作业是否在quartz调度程序中运行#

    我正在使用石英调度程序根据触发器的用户输入来安排写入文件的作业 我想检查作业是否仍在 stop 方法中运行 如何检查作业是否仍在运行 public class JobScheduler static StdSchedulerFactory
  • 如何在 TargetFrameworks 标记中每个框架运行一次的目标之前创建仅运行一次而不是一次的 MSBuild 目标?

    我有一个我部分拥有的代码生成器工具 现在 csproj 文件可以在其中列出多个目标框架并构建所有这些框架 我试图弄清楚如何使 MSBuild 目标仅在每个目标中生成一次代码无论列出了多少个目标框架 都将运行构建 并让每个目标框架的编译等待代
  • DISM.exe 返回代码?

    我有一个程序调用 dism exe 程序 它在后台运行一些命令 现在 我只检查返回代码 0 或其他任何内容 以显示进程失败或成功 我可以用什么来交叉检查返回代码以获得准确的返回错误 DISM 参考了哪些回报 评论中提供的链接DISMAPI
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • 修改排列算法以防止重复打印输出的策略

    我一直在审查实践算法 目前正在研究一种我非常喜欢的排列算法 void permute char set int begin int end int range end begin if range 1 cout lt lt set lt l
  • thread_local成员变量构造

    我遇到了 thread local 的一些奇怪行为 不确定我是否做错了什么或者这是一个 GCC 错误 我有以下最小重现场景 include
  • 执行按钮单击时使 wpf UI 响应

    在我的 wpf c 应用程序中 当用户按下按钮时会执行一个很长的过程 当按下按钮直到执行完整的代码时 窗口将冻结 用户无法在窗口中执行任何其他任务 如何使按钮单击代码作为后台进程 以便窗口响应用户 我尝试过以下方法 但没有成功 privat
  • 将 JSON 转换为数据表

    我有以下格式的 JSON id 10 name User add false edit true authorize true view true id 11 name Group add true edit false authorize
  • 从 C++ 检索 Python 类型

    这个问题实际上是以下两个问题的延伸 如何在 Python 中实现 C 类 以供 C 调用 https stackoverflow com questions 9040669 how can i implement a c class in
  • 升压参数库

    最近我发现参数 http www boost org doc libs 1 50 0 libs parameter doc html index htmlBoost 中的库 老实说 我不明白为什么这是 Boost 的一部分 当需要向函数传递
  • 检测 Windows 重新启动是否是由于 Windows 更新造成的

    我的电脑上的一些应用程序一直在检测 Windows 更新是否重新启动 这是可以观察到的 因为它们会在 Windows 更新自动重启后重新启动 这非常有帮助 因为这些应用程序会重新加载更改 甚至unsaved更改或恢复选项卡 如果是浏览器 执
  • 如何将谓词作为参数传递#

    如何将谓词传递到方法中 但在没有传递谓词的情况下仍使其工作 我想也许是这样的 但似乎并不正确 private bool NoFilter return true private List

随机推荐

  • 获取 iframe 的源代码

    有没有办法获取 iframe 加载的页面的源代码 我不想更改任何代码 我只想阅读它 我还需要能够使用 javascript html 来获取它 document getElementById iframeID contentWindow d
  • Swift 2 中“kGMSMarkerAnimationPop”错误的使用不明确

    我在尝试为 GMSMarker 制作动画时遇到错误 我已遵循 Google 文档和各种指南 但它不断返回错误 下面是我的代码 func placeMarker coordinate CLLocationCoordinate2D if loc
  • g++ 链接问题:对函数的未定义引用

    我使用 CMake 和 Visual C 构建 HyDE 库 然后 仍然在 VC 中 我能够成功创建代码并构建链接到 HyDE lib 和 HyDE 头文件的可执行文件 然后我发现 为了与我公司的其他人一起工作 最好在 Eclipse CD
  • 复选框树

    我正在寻找 Javascript 的 复选框树 小部件 我尝试使用jquery 检查树 http jquery checktree googlecode com 其声称完全符合我的要求 但它存在以下问题 它无法识别已选中的复选框 并将所有内
  • 查找用户是否是 Active Directory 组 ASP.NET VB 的成员?

    我正在使用 Active Directory 对 Intranet 站点的用户进行身份验证 我想根据用户在 Active Directory 中所在的组来优化经过身份验证的用户 有人可以向我展示或指出如何在 ASP NET 4 0 VB 中
  • 在 Angular 2 中使用 ngForTemplate 时绑定事件

    假设我有这个简单的列表渲染组件 import Input Component from angular2 core Component selector my list template div item div class MyList
  • 为什么编译器会优化掉由于 strncmp() 而导致的共享内存读取,即使使用了 volatile 关键字?

    这是一个程序foo c将数据写入共享内存 include
  • 角度结构指令上下文模板类型检查

    我似乎无法使角度模板自动完成工作 任何人都可以帮助我理解我错过了什么或做错了什么吗 div xd item div 我几乎继续研究 ngIf 和异步管道源代码 试图了解正在发生的事情 并制定了这个简单的指令 只是为了方便我的异步订阅生活 这
  • 与 Boost 和 ncurses 的静态链接

    我正在制作一个基本的角色扮演游戏 我想静态地包含 Boost 库 以便运行我的游戏的人不需要拥有它们 我研究并查找了所有你需要做的就是添加 static到命令行编译 所以我的命令是这样的 g static o karthas o lncur
  • 如何阻止不良的身份不明的机器人爬行我的网站?

    我怎样才能抵御不良的不明机器人爬行我的网站 一些名称未出现在 Apache cPanel 中的恶意机器人正在严重访问我的网站带宽 我曾在 batgap com robots txt 上尝试过 robots txt 也使用 htaccess
  • 在 boto3 1.5.36 上使用 S3.Object().put() 在 S3 中存储 matplotlib 图像

    除其他事项外 我正在使用绘图matplotlib 我想立即将其存储为 S3 对象 根据中提供的答案this https stackoverflow com q 33771318 1129682 and 这个其他 https stackove
  • 了解 Android 应用程序中的内存泄漏

    我找到了这篇文章 避免内存泄漏 http android developers blogspot it 2009 01 avoiding memory leaks html 其中据说有以下代码 private static Drawable
  • 从 vbscript 自动填充 Excel 文件中的 Excel 用户表单

    我有一个 Excel 文件 其中充满了宏 函数和用户窗体 可帮助用户在此 Excel 文件中正确填写数据 我需要编写一个访问其中一个用户窗体的 VBScript 自动填充它 我知道如何调用工作簿中存在的 VBA 宏 objExcel App
  • 创建应用程序 plist

    Mac OS X Application Info plist 文件是什么样的 我只需要最低限度 这样我就有 启动可执行文件 有一个图标 Thanks 这是真实的 最低限度的
  • 将自定义滚动函数应用于数据框

    尝试将自定义滚动函数应用于 pandas 数据框时出现异常 例如 import statsmodels api as sm import pandas as pd import numpy as np def univar regr bet
  • tFPDF 生成一个空的 pdf 文件

    我正在尝试使用 tFPDF 库在 PHP 中生成 PDF 文件 我从 FPDF 开始 除了 UTF 8 字符是乱码之外 它工作得很好 经过一番搜索 我发现可以实现 tFPDF 以在 PDF 文件中包含 UTF 8 字符 但我所有的尝试都导致
  • 如何在 R 中将单列转换为矩阵

    我有一个长度为 R N 的单列 我想将其转换为 R 中的 RxN 矩阵 是否有任何简单的方法可以在不使用循环和值赋值的情况下完成此操作 格式为 r1 r2 r3 rR N 将其转换为 r 1 N r N 1 2 N 这在 R 中非常简单 假
  • 自己为我拥有 SSL 证书的域的子域颁发 SSL 证书

    我想这是不可能的 但如果可以的话 我想知道为什么 假设我从附近的官方证书颁发机构之一获得了 example com 的 SSL 证书 假设我正在运行 a example com 和 b c d example com 并且也希望拥有它们的
  • 修改 std::string::op[] 的结果合法吗?

    请考虑 C 11 中的以下内容 C 11 21 4 5 basic string元素访问 string access const reference operator size type pos const reference operat
  • 这实际上是模棱两可的吗?

    所以我知道代码中的大括号不仅仅意味着initializer list 如果不是initializer list 大括号括起来的列表是什么 https stackoverflow com q 37682392 2642059 但他们应该做什么