函数内的右值引用参数的类型是什么? [复制]

2023-12-13

我这里有一个非常简单的函数定义:

void testRvalue(int&& r)
{
    printf("rvalue ref is called\n");
    testRvalue(r); // this line gives "no known conversion from 'int' to 'int &&' for 1st argument"
}

我的意思是在这个函数内部,什么是类型r?不是吗int&&(参数是int&& r那么怎么会r不属于类型int&&?)如果是的话为什么我不能通过这个r对于这个函数本身,它需要一个int&&类型作为参数?

是什么类型的r确切地?int&& or int? If int, why?


一本很好的读物是价值类别.

是的,变量的类型r确实是int&&。然而这里重要的是表达方式 and:

每个 C++ 表达式(一个运算符及其操作数、一个文字、一个 变量名等)由两个独立的属性来表征:a 类型和值类别。每个表达式都有一些非引用 类型,并且每个表达式恰好属于三个表达式之一 主要值类别:右值、x值和左值。

表达方式r是一个左值:

lvalue

以下表达式是左值表达式:

  • 变量的名称 [...],无论类型如何。即使变量的类型是右值引用,由其组成的表达式 name 是一个左值表达式;

右值引用可以绑定到纯右值或x值,但不能绑定到左值,因此如果您想将右值引用绑定到r你需要转换r到 x 值。这是用完成的std::move尽管它的名字只是一个演员阵容。

您可以很容易地这样推理:如果它有一个名称,那么它就是一个左值(即使该 id 的类型是右值引用)。您不能将右值引用(原则上应该绑定到临时对象)绑定到具有名称的对象。有名称的东西可以重复使用。你需要std::move to 启用移动从那个左值。

关于“没有已知的‘int’转换”消息。如上所示表达式的类型r is int,但是更合适的诊断消息应该是这样的:“右值引用无法绑定到左值”。

事实上,较新的 clang 和 gcc 给出了更好的消息:

gcc

错误:无法将“int&&”类型的右值引用绑定到“int”类型的左值

clang

候选函数不可行:第一个参数需要右值

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

函数内的右值引用参数的类型是什么? [复制] 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 如何查找给定日期最近的日期(一周中的某一天)

    我一直在练习查询 我当前的情况是找到给定日期最近的星期六 在我弄清楚逻辑之后 我想出了一个 看起来像是一个又长又乱的查询 我想知道是否有一种方法可以简化这个过程 这是我的查询 DECLARE DATE DATE SET DATE 2013
  • Nsight 远程调试器设置

    我正在尝试设置远程 Nsight v2 2 调试器 仅用于 GPU 调试 无 CUDA 我已经关注了这个英伟达 pdf用于设置远程目标机器和开发机器 一切都已启动并正在运行 但两者之间的通信不正常 我收到诸如 MSVSMON exe 未在远
  • 在 mailto 正文中插入换行符

    我想在我的 mailto 正文中插入换行符 我尝试了 0A 0D 和 0D 0A 没有什么对我有用 我在 Mac OSX 上使用 Google Chrome 测试了 Gmail Yahoo Apple Mail Outlook 2010 O
  • 在 D3 中换行文本

    我想让文本绕在下面的 D3 树上 这样就可以了 Foo is not a long word 每行都换行为 Foo is not a long word 我尝试将文本设置为 foreignObject 而不是文本对象 文本确实会换行 但它不
  • 使用未修饰的窗口启动 Tkinter

    使用 Python 2 和 Tkinter 如何在窗口上方没有标题栏的情况下启动 Tk 窗口 from Tkinter import root Tk frame Frame root frame pack bottomframe Frame
  • 使用 typescript 导入外部 javascript 的最佳方法

    目前 如果我想将外部代码加载到我的打字稿文件中 我有两种不同的方法 如果我引用另一个打字稿文件 我必须写 import object require path to the internal module 但如果我从现有的 js 文件加载代
  • 具有自定义 HTTP 和 ConfigService 的循环依赖的 DI

    我正在尝试实现 ConfigService 来检索项目中正确环境的正确配置 我目前遇到了循环依赖 index 28 Error SystemJS Provider parse errors Cannot instantiate cyclic
  • 查看 Node.js String.prototype 的方法?

    在 Node js REPL 中 如果您输入String prototype 一个空对象 被返回 但是 如果您在 Chrome JavaScript 控制台中键入它 则会返回一个带有预期函数名称和功能的对象 为什么 Node js 没有表现
  • 启动项目时出现无法理解的错误(gradle)

    我连接了一个库compile com balancedpayments balancedpayments 1 4 去项目时没有错误 但是当我尝试运行时 我看到错误 Executing tasks app assembleDebug Conf
  • PHP header() 不起作用

    有人知道为什么我的 header 不重定向吗 我的脚本的最后一部分是 header location test php die died 它写道 died 它应该在死亡之前重定向 但它没有 你有什么想法吗 您可能正在调用 header af
  • JSONB sqlalchemy 聚合函数

    使用 SQLAlchemy 我想重现可用的聚合函数来自子查询的 jsonb object aggsq objects from sqlalchemy import select func s select sq objects c obje
  • 为什么将 html 代码打印为字符串会给出十六进制数字作为 python 中的输出?

    我写了一个Python代码来修改我的html内容 但是在再次将其写入 html 文件时 我得到了奇怪的十六进制数字 import re search www abc com description blah blah f open myht
  • 将三个js的IIFE函数转换为es6?

    我正在尝试将我的 Threejs 项目分解为更小的模块 但我遇到了困难 以这个函数为例 var updateCamera function var euler new THREE Euler 0 0 0 YXZ return functio
  • Python删除组合字典列表中的重复值

    我需要一点家庭作业帮助 我必须编写一个将多个字典组合成新字典的函数 如果某个键出现多次 新字典中与该键对应的值应该是唯一的列表 作为一个例子 这是我到目前为止所拥有的 f a apple c cat b bat d dog g c car
  • 如何使用make_cudaExtent正确定义cudaExtent?

    我想在 CUDA 中有一个 3d 浮点数组 这是我的代码 define SIZE X 128 numbers in elements define SIZE Y 128 define SIZE Z 128 typedef float Vol
  • 忍者绑定

    如何将我的接口绑定到不同程序集中的具体类 我的解决方案中有以下项目 Foo DataFoo 域名 在 Structure Map 中 我将两个程序集名称添加到 StructureMap config 文件中 然后使用 PluginFamil
  • 可以在导航选项中使用 navigation.toggleDrawer()

    在我的导航文件中 当我想切换抽屉时 出现以下错误 类型错误 navigation openDrawer 不是一个函数 在 navigation openDrawer navigation openDrawer 未定义 这是我的抽屉 cons
  • Laravel:preg_replace():参数不匹配,模式是字符串,而替换是数组

    我想将结果保存在数据库中 但出现错误异常 在我看来 我有一个单选按钮 数组 它可以获取每个学生的结果 即出席 迟到 缺席 其他 这是我的观点 td users gt student id td td users gt student fir
  • jQuery:执行同步 AJAX 请求

    我过去曾做过一些 jQuery 但我完全坚持这一点 我知道使用同步 ajax 调用的优点和缺点 但在这里它是必需的 远程页面已加载 由 firebug 控制 但未显示返回 我应该做些什么来使我的函数正确返回 function getRemo
  • 函数内的右值引用参数的类型是什么? [复制]

    这个问题在这里已经有答案了 我这里有一个非常简单的函数定义 void testRvalue int r printf rvalue ref is called n testRvalue r this line gives no known