对于 C++ 重载解析,为什么 {} 是 int 比 string 更好? [复制]

2023-11-24

重载解析倾向于将 {} 视为某种基本类型,而不是某种容器。

例如:

#include <iostream>
#include <string>

void foo(const std::string&) {std::cout << "string\n";}
void foo(int) {std::cout << "int\n";}

int main() { foo({}); }

编译时无需任何诊断和输出:

int

https://godbolt.org/z/zETfrs5as

如果要注释掉int过载然后它可以正常工作string.

问题是为什么?从程序员的角度来看,这可能会令人困惑 错觉。


From over.ics.list#9.2:

如果初始值设定项列表没有元素,则隐式转换序列是恒等转换。 [ 例子:

 void f(int);

 f( { } );               // OK: identity conversion

—《示例结束》]

因此,转换自{} to int是身份转换,而{} to const std::string&是用户定义的转换。并且由于恒等转换是更好的匹配,因此对应的重载int将被选择。

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

对于 C++ 重载解析,为什么 {} 是 int 比 string 更好? [复制] 的相关文章

  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 从 nsarray 中获取 n 个随机对象(例如 4)

    我有一个很大的 NSArray 名称 我需要从该数组中随机获取 4 条记录 名称 我该怎么做 include
  • 是否有可能在 emgucv 中找到“斑点”区域的边缘?

    我有一个看起来像这样的图像 我想找到黑暗部分的边缘 如下所示 红线是我正在寻找的 我尝试了几种方法 但没有一个有效 所以我希望有一位 emgu 大师愿意帮助我 方法一 将图像转换为灰度 去除噪音并反转 删除任何不太亮的东西 获取精明和多边形
  • startMonitoringSignificantLocationChanges 的替代方案?

    我是iPhone应用程序开发的初学者 但我正在尝试制作一个应用程序 基本上每隔一段时间更新一次您的位置 当它不在前台时 这样我就可以绘制一个人在他 她时去过的地方启动一个应用程序 我以为我可以使用 startMonitoringSignif
  • 无法获取 Gradle 包装器属性

    当我尝试导入项目时出现以下错误 无法从以下位置获取 Gradle 包装器属性 F projects Polyfills cordova platforms android gradle wrapper gradle wrapper prop
  • 如何在 Maven 中使用 BOM 文件?

    我在互联网上进行了大量研究 但没有找到任何简单的解释如何处理BOM使用 Maven 生成文件 问题是我使用 JBoss 7 1 1 并且我想将所有 JBoss 客户端 jar 包含在pom xml JBoss 有一本手册说我应该使用 BOM
  • Python 样条线或其他与 x 轴上的时间一起工作的插值?

    尝试使用非常有用的 pandas 来处理作为时间序列的数据 我现在绊倒了这样一个事实 似乎不存在可以直接对具有 DateTime 作为 x 的数据进行插值 使用样条曲线或类似方法 的库轴 我似乎总是被迫首先转换为某个浮点数 例如 1980
  • SQL Server 2005 非聚集索引死锁

    谁能帮我解决 SQL Server 2005 中的死锁问题 对于一个简单的测试 我有一个表 Book 它有一个主键 id 和一个列名 该主键的默认索引是非聚集的 当两个会话同时运行时就会发生死锁 活动监视器显示第一个会话 step 1 使用
  • Heroku 和 node-cron?

    所以我知道 Heroku 的免费测功机在没有任何流量时会 放松 这会如何影响我使用 node cron 模块实现的 cron 作业 当您的空闲测功机处于睡眠状态时 由node cron 安排的作业将不会运行 作为替代方案 您可以使用Hero
  • json.dump() 是否附加到文件?

    我在使用 json dump 时遇到一些意外行为 我正在创建一个文件results 空 然后在代码中使用它 如下所示 with open results r as fp temp try file not empty load existi
  • Double 值返回 0 [重复]

    这个问题在这里已经有答案了 这是一个例子 Double d 1 3 System out println d 这会返回 0 而不是 0 33333 它应该是这样 有人知道吗 那是因为1 and 3被视为integers当你没有另外指定时 所
  • Spray.io:无法编译测试规范

    我有以下服务 trait PingService extends MyHttpService val pingRoutes path ping get complete message gt pong MyHttpService是一个扩展的
  • 使用 OpenCV 在斑点内创建矩形

    输入图像 输出图像 我的图像中有几个彩色斑点 我试图在每种颜色的最大斑点内创建矩形 或正方形 这似乎更容易 我发现了如何创建一个包围单个最大斑点的矩形 的答案 但我不确定如何找到一个适合在斑点内的正方形 它不一定是最大的 它只需要大于某个区
  • ModuleNotFoundError:pip 安装后没有名为 的模块

    我在 python 包分发中迈出了第一步 不幸的是 我有ModuleNotFoundError从 pip 安装成功后 我的目录布局非常简单 maindir setup py pysoft init py main py pylib py m
  • Python/Django shell 无法启动

    Django 的一大特色是您可以打开 python 解释器设置以用于您的项目 这可用于分析数据库中的对象 并允许在您的项目上执行任何 python 命令 我发现它对于 Django 开发至关重要 使用以下命令在项目目录中调用它 python
  • Flutter / Dart AES-256-CBC 从 PHP 中的加密中解密

    任何人都可以帮助我找出使用 AES 256 CBC 在 PHP 中加密的数据的解密算法 我尝试了很多不同的方法 但我认为在尝试复制在 Dart 中重新创建 Key IV 的方法时我搞砸了 并且不断收到异常 例如 RangeError end
  • 当 DataSource 为空时,WPF DataGrid 无法添加行

    CanUserAddRows True 仅当已经有数据时才有效ItemsSource of the DataGrid 如果原始项目列表中没有行 则DataGrid不显示用于输入新项目的占位符行 即使我已设置CanUserAddRows Tr
  • C# 模式防止事件处理程序挂钩两次 [重复]

    这个问题在这里已经有答案了 重复 如何确保一个事件只订阅一次 and 是否已添加事件处理程序 我有一个提供一些服务的单例 我的类挂钩到它的一些事件 有时一个类挂钩两次事件 然后被调用两次 我正在寻找一种经典的方法来防止这种情况发生 不知何故
  • java线程和主线程

    让主线程等待所有线程完成的最佳方法是什么 for int i 0 i
  • 如何以编程方式检测 iPhone 中的 EDGE 网络或不良网络?

    我需要检测iPhone中的EDGE网络和不良网络 1 如何检测信号不好 2 是否可以检测边缘网络分别地 3 如何获得网络的强度 请就这些问题给出一些答案 提前致谢 在 iOS7 上 你可以 http www objc io issue 5
  • 对于 C++ 重载解析,为什么 {} 是 int 比 string 更好? [复制]

    这个问题在这里已经有答案了 重载解析倾向于将 视为某种基本类型 而不是某种容器 例如 include