为什么自动向下转换不应用于模板函数?

2023-12-31

有人问这个问题 https://stackoverflow.com/questions/45505477关于字符串附加。它是string s; s = s + 2;不编译。人们给出的答案是operator+被定义为模板函数,而operator+=不是,所以自动向下转型(int(2) to char(2))不适用。

原型是

template<typename _CharT, typename _Traits, typename _Alloc>
class basic_string{
    basic_string&
      operator+=(_CharT __c);
};

template<typename _CharT, typename _Traits, typename _Alloc>
  inline basic_string<_CharT, _Traits, _Alloc>
  operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs);

为什么编译器不能直接使用这个原型并将 int(2) 转换为 char(2) ?

basic_string<char, _T, _A> operator+(const basic_string<char, _T, _A>, char);

编译器(G++ 6.3.0)抱怨说

[Note] deduced conflicting types for parameter '_CharT' ('char' and 'int')

关键的区别在于对于operator +=变体,char 类型模板参数std::basic_string,因此其 RHS 的参数类型已固定为char,而operator+模板必须从它的参数中推断出这一点。

因此,对于+=在这种情况下,编译器知道你“想要”int->char转换,那里没有什么可以推断的。

For the operator+另一方面,编译器正在查看模板

template<class CharT, class Traits, class Alloc>
    basic_string<CharT,Traits,Alloc>
        operator+( const basic_string<CharT,Traits,Alloc>& lhs,
                   CharT rhs );

并且,当试图确定什么时CharT应该是,它得到CharT = char从第一个操作数开始(如std::string is std::basic_string<char>) and CharT = int来自第二个操作数。标准将这种冲突定义为编译错误。

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

为什么自动向下转换不应用于模板函数? 的相关文章

  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 将数据打印到文件

    我已经超载了 lt lt 运算符 使其写入文件并写入控制台 我已经为同一个函数创建了 8 个线程 并且我想输出 hello hi 如果我在无限循环中运行这个线程例程 文件中的o p是 hello hi hello hi hello hi e
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 如何使用 zend from 在 zend Framework 2 中添加自定义属性

    我想在 zend 框架项目中使用 angularJS 并且在这个项目中表单是使用 zend 表单生成的 如何在表单元素中添加诸如 ng model 之类的角度指令 但是每当我尝试在视图中的 zend form 元素 输入 选择等 中添加此自
  • 如何使用 selenium python 抓取悬停高图表上的值?

    我正在尝试从中抓取数据https www similarweb com website zalando de overview https www similarweb com website zalando de overview使用Py
  • 编辑 D3 Sunburst 可视化的innerRadius

    如何更改旭日可视化最内圆的半径 请参阅以下示例 http bl ocks org d 910126 http bl ocks org d 910126 注意中心区域有多大 可以再小一点吗 另外 是否可以为旭日中的所有层定义不同的高度 Yes
  • 无法从 Web.Config 读取 appSettings 值

    我的 web config 中有以下内容
  • C# 中附加到鼠标的工具提示

    如何使用 C 获取附加到鼠标光标的工具提示 我试图实现如下所示的效果 一个小工具提示显示 Ctrl Shift Alt 键的状态 我目前正在使用Tooltip但除非有大约 2 行文本 否则它拒绝显示 tt new ToolTip tt Au
  • 如何解决加载模型以获得新预测的问题?

    我训练了一个模型并将其另存为import os model save 我想使用我的模型对新测试集进行预测 因此我通过以下方式加载它model tf keras models load model 它向我展示了这种警告 警告 tensorfl
  • C# 的 HttpListener 问题

    我使用一个 Windows 服务编写了HttpListener异步处理来自点的请求 它工作正常 但有时会遇到问题 需要重新启动服务或服务器才能修复 最初我声明了侦听器对象 public HttpListener PointsListener
  • 从 Moq 调用操作

    我有一个服务 其方法需要两个Actions 一为成功 一为失败 每个Action采用包含附加信息的 Result 参数 void AuthoriseUser AuthDetails loginDetails Action
  • Android 中的 Firebase 本地数据库有多安全?

    我计划改用 Firebase 作为我的 Android 应用程序的本地和在线数据库 根据文档 Firebase 首先将更改存储到本地数据库 然后在网络可用时将其推送到在线数据库 在我的应用程序中 我会将一些有关用户的非常敏感的数据放入数据库
  • TypeScript 接口是否应该在 *.d.ts 文件中定义

    TypeScript 新手问题 在我们的项目中 我们使用一些外部 JavaScript 库 需要在其中添加 d ts 文件 我了解这个用例以及我们需要这样做的原因 但是 对于我们自己定义的接口 我的一位开发人员建议我们在 d ts 文件中定
  • 如何使用 gmock MOCK_METHOD 进行重载运算符?

    我是 googlemock 和 StackOverflow 的新手 我在使用时遇到问题MOCK METHODn在googlemock中 我相信这个功能被广泛使用 这就是我所做的 我有一个抽象类Foo虚拟重载operator class Fo
  • 无法在 Azure DevOps 构建管道中使用 .NET SDK 代理

    我有一个 ASP NET Core 2 1 并添加了 Microsoft WindowsAzure Storage 的 nuget 包 但是将代码推送到存储库后 构建管道在运行构建代理时发生包错误 是否有必要在构建中添加任何其他代理除 BU
  • 将 ImageView 设置为 Android 后台

    我发现了许多类似的问题和答案 但我没有成功地解决这些问题 我想将 ImageView 设置为背景 以便我所做的其他所有事情都在它前面 我不想使用 xml 背景选项 因为我将在活动中更改我的背景 并且我不知道如何防止它拉伸 Thanks bg
  • Laravel 5 + Eloquent toJson/toArray 导致奇怪的分段错误

    我讨厌回答我自己的问题 所以也许你可以帮助我找到解决这个问题的方法 我有一些属于彼此的雄辩模型 我通过像这样的关联来设置它们 这都是正常的事情 不幸的是 这个过程会导致 device 工作不稳定 下面您可以看到单个值是可以访问的 但任何形式
  • void_t“可以实现概念”?

    我在看第二部分 期间他讨论了他的小说的用途void t lt gt 建造 在他的演讲中 Peter Sommerlad 问了他一个我不太明白的问题 链接直接指向问题 所讨论的代码就发生在该问题之前 萨默拉德问道 沃尔特 这是否意味着我们现在
  • 向 numpy 数组中的所有奇数或偶数索引元素添加一个数字,无需循环

    假设你的 numpy 数组是 A 1 1 2 3 4 您可以简单地执行以下操作 A 1 向 numpy 数组的每个元素添加一个数字 我正在寻找一种将数字添加到奇数或偶数索引数字的方法A 2 1同时保持整个阵列完好无损 是否可以在没有任何循环
  • 使用 IntelliJ IDEA 运行 Maven 项目

    我是 IntelliJ IDEA 的新手 我想使用它运行一个简单的 Maven 快速入门项目 我按照所有说明进行操作 该项目已成功构建 但是当我尝试编译并运行它时 Run按钮未激活 看来 IntelliJ IDEA 无法弄清楚主类在哪里 这
  • CGDataProviderCopyData() 实际上复制字节吗?或者只是指针?

    我正在尽可能快地连续运行该方法 并且越快越好 所以显然如果CGDataProviderCopyData 实际上是逐字节复制数据 那么我认为必须有一种更快的方法来直接访问该数据 它只是内存中的字节 任何人都知道如果CGDataProvider
  • 2D 弹性球碰撞物理

    我正在制作一个涉及弹性球物理学的程序 我已经计算出了与墙壁和静止物体碰撞的所有数学公式 但我无法弄清楚当两个移动的球碰撞时会发生什么 我有质量和速度 确切地说是 x 和 y 速度 但每个球的速度及其方向都可以 并且想要这些的公式 请记住 这
  • 为什么自动向下转换不应用于模板函数?

    有人问这个问题 https stackoverflow com questions 45505477关于字符串附加 它是string s s s 2 不编译 人们给出的答案是operator 被定义为模板函数 而operator 不是 所以