转发引用是否仍然是右值引用?

2024-03-19

我仍然对支持移动和转发而发明的规则感到困惑。我仍然不确定的一件事是:

是转发参考 just 右值引用(和 应用参考折叠规则)?

如果它是右值引用,那么该函数为什么会这样:

template<typename T>
void func(T&&);

不仅接受右值,还接受左值?


我不确定这个答案是否会让您满意,但我可以指出标准的相关部分。简而言之,参考T&&“从语法上讲”始终是右值引用,但有时它最终声明的类型是左值引用类型。

当这种情况作为模板参数推导的结果发生时,整个构造被称为“转发引用”,作为一种方便的简写。 (这种情况需要引用折叠,但模板参数推导并不是引用折叠发生的唯一一次。)

现在,我们来看看标准措辞。首先我们有[dcl.ref](例如p2 http://eel.is/c++draft/dcl.ref#2, p6 http://eel.is/c++draft/dcl.ref#6):

使用声明的引用类型&被称为左值参考,以及使用声明的引用类型&&被称为右值引用. [...]

If a typedef 名称(9.1.3, 13.1) 或decl类型说明符(9.1.7.2) 表示类型TR这是对类型的引用T,尝试创建类型“左值引用”cv TR”创建类型“左值引用T“, 尽管 尝试创建“右值引用”类型cv TR” 创建类型TR. [Note:此规则称为引用折叠。 —end note]

最后,模板参数推导的情况在 [temp.deduct.call] 中处理p3 http://eel.is/c++draft/temp.deduct.call#3:

A 转发参考是对 cv-unqualified 模板参数的右值引用 [...]

换句话说,转发参考is一个右值引用,但它也接受左值。 (请注意,标准对“转发引用”的定义实际上并不需要推导模板参数,尽管这是您通常希望触发引用折叠行为的主要方式。)

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

转发引用是否仍然是右值引用? 的相关文章

  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 为什么基类必须有一个带有 0 个参数的构造函数?

    这不会编译 namespace Constructor0Args class Base public Base int x class Derived Base class Program static void Main string a
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 在 C# 中将 LDAP AccountExpires 转换为 DateTime

    我想将 LDAP AccountExpires 中的 18 位数字字符串转换为正常日期时间格式 129508380000000000 gt gt 2011年5月26日 我通过使用以下链接获得了上述转换 http www chrisnowel
  • Admob 插页式广告显示为黑色,并带有新的广告单元 ID

    我创建了一个应用程序 并且正在使用 admob 插页式广告 由于我已为该应用程序创建了新的插页式广告单元 ID 但广告显示为黑色并带有关闭按钮 但如果我使用旧的应用程序 广告单元 ID 广告将会显示 我不知道为什么会出现这个问题 谢谢 对于
  • 泛型地狱:hamcrest 匹配器作为方法参数

    因此 让我们有一个字符串列表和一个函数 该函数采用 Hamcrest 匹配器并返回matches 提供的匹配器的方法 public boolean matchIt final Matcher
  • 如何在 Notepad++ 中多行“在文件中替换...”

    如果有免费的源代码编辑器记事本 http notepad plus sourceforge net uk about php具有 在文件中查找 功能 即无需在编辑器中打开文件 它是否也具有 在文件中替换 功能 Notepad 是基于Note
  • 如何从 PhantomJS 或 grover 跳过代码执行

    接下来的问题是 我的应用程序中有 JavaScript 代码 我想跳过 隐藏 PhantomJS 和 grover 检查 执行中的一些代码 So 如何跳过 隐藏 PhantomJS 或 grover 的代码执行 注意 当我编写 JavaSc
  • 无法定义使用动态的类或成员,因为编译器需要类型

    我在 Asp Net 3 5 应用程序中使用 Facebook SDK C 库 当我尝试编译下面的代码时 请给我错误 据我所知 动态类型在 4 0 框架中使用 那么无论如何要重写它才能使其工作吗 我有一个对 System Core 3 5
  • 单值上下文中的多个值

    由于 Go 中的错误处理 我经常会得到多个值函数 到目前为止 我管理此问题的方式非常混乱 我正在寻找最佳实践来编写更清晰的代码 假设我有以下功能 type Item struct Value int Name string func Get
  • awk gzip 输出到多个文件

    我可以像这样 gzip awk 输出 echo col1 col2 awk print 1 gzip gt out 但是是否也可以将两个 awk 输出文件流通过管道传输到 gzip 这不起作用 echo col1 col2 awk prin
  • 有没有办法获取Bitmap的存储大小?

    在我的应用程序中 我正在下载一些图像 我想知道是否有任何方法可以获得我下载的位图的大小 这是一个简单的问题 但我似乎无法通过谷歌找到解决方案 这是下载代码 Bitmap b BitmapFactory decodeStream InputS
  • Python 中的肥皂调用

    我试着打电话给肥皂服务公司 我的调用成功 但返回空值 下面我附上了我的肥皂请求和响应架构 它接受一维数组作为输入并返回该数组 请求架构
  • 如何为 HTTPS 调用指定出站证书别名?

    我正在调用需要客户端证书身份验证的 Web 服务 如果我指定一个包含单个证书 服务期望的客户端证书 的 Java 密钥库 那么一切都会正常工作 但是 如果我使用包含多个证书的密钥库 那么我似乎无法指定客户端应选择哪个证书 客户端似乎会选择第
  • 托管调试助手“FatalExecutionEngineError”0xc0000005

    托管调试助手 FatalExecutionEngineError 运行时 遇到了致命错误 错误的地址是 0x641ad419 在线程 0x5d0c 上 错误代码为0xc0000005 这个错误 可能是 CLR 或不安全或不可验证部分的错误
  • 更新 UI5 中的模型,使用格式化程序时双向数据绑定变为单向数据绑定

    在我的 UI5 应用程序中 我有一个表 其中每行包含一个sap m Switch https sapui5 hana ondemand com api sap m Switch 它通过以下方式绑定到模型formatter https sap
  • HttpUrlConnection getOutputStream 有问题

    我制作了一个android应用程序并用于HttpUrlConnection POST 方法 HoloEverywhere 库 但我有问题 为什么会出现我不知道的问题 我认为 getOutputStream 错误 因为如果用于 getOutp
  • Pandas 稀疏数据导出到 csv - 速度解释

    我正在尝试导出由类型列组成的 Pandas 数据框的子集pd SparseDtype float32 np nan 到 csv 我注意到直接写入 csv 与使用sparse to dense 然后写入csv 谁能向我解释一下这是怎么回事 一
  • Perl/regex 删除字符串的前 3 行和后 3 行

    我正在寻找构建一个正则表达式语句以始终删除前 3 个 字符串的行 以及字符串的最后 3 行 中间部分 可以是任意 n 行内容 任何干净的正则表达式方式来实现 这个输出 即总是删除我们的前 3 行和最后 3 行 字符串 并保留中间部分 这可以
  • dos2unix:找到二进制符号,跳过二进制文件

    我当前遇到一个问题 当尝试对文件执行 dos2unix 命令时 我的脚本失败 这就是我在脚本中的内容 dos2unix n data file data tmp file dos2unix Binary symbol found at li
  • 提示用户输入汇编 ci20 seg 错误

    我目前正在 ci20 机器上开发一个小程序 提示用户输入整数值 然后将该值打印到屏幕上 我当前的代码 data prompt asciiz Please enter an integer message asciiz nValue ente
  • 如何使用 ES6 Fat Arrow .filter() 对象数组

    我正在尝试使用 ES6 箭头函数 filter返回成人 杰克和吉尔 看来我不能使用 if 语句 为了在 ES6 中执行此操作 我需要了解什么 var family name Jack age 26 name Jill age 22 name
  • 转发引用是否仍然是右值引用?

    我仍然对支持移动和转发而发明的规则感到困惑 我仍然不确定的一件事是 是转发参考 just 右值引用 和 应用参考折叠规则 如果它是右值引用 那么该函数为什么会这样 template