右值引用和左值引用作为参数之间的区别

2024-01-26

读完帖子后:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html.

我无法弄清楚当您编写将左值或右值引用作为参数的函数时,例如:

void printReference (const string& str)
{
    cout << str;
}

void printReference (string&& str)
{
    cout << str;
}

why the firstprintReference 函数可以接受任何参数,无论是左值还是右值,并且不管左值或右值是否可变。 然而,在secondprintReference 函数,只允许传递可变的右值。

可能是我的理解有误,谁能帮我解决一下。


第一个选项可以采用左值,因为它是左值引用。它可以接受右值,因为它被标记了const并且右值可以绑定到const左值引用。

第二个版本只允许非const右值,因为你不能隐式剥离const来自引用和右值引用不允许左值绑定到它们。

语义上的区别在于,前一个函数是说“我只是要阅读你在这里传递的内容,我不想复制它”,而后者是说“我保留从这个对象中剔除内容的权利”并用它们粉刷我的客厅”。

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

右值引用和左值引用作为参数之间的区别 的相关文章

随机推荐

  • 用于通过电子邮件发送活动电子表格的 Google Apps 脚本

    我在网上找到了一个脚本 它可以获取当前工作表 将其复制到临时的新电子表格中 将其转换为 PDF 并通过电子邮件发送 我能够让它工作 但尝试将其设置为仅发送特定范围 尝试了一下 但无论如何我都不是一个好的编码员 或者 我也有兴趣弄清楚如何让它
  • CGIHTTPRequestHandler 在 python 中运行 php 或 python 脚本

    我正在 Windows 上编写一个简单的 python Web 服务器 它可以工作 但现在我想运行动态脚本 php 或 py 而不仅仅是 html 页面 这是我的代码 from BaseHTTPServer import HTTPServe
  • Oracle数据库连接超时设置

    如果一段时间不活动 与 Oracle 数据库的连接会被断开 这会导致错误 gt end of file on communication channel 客户端计算机上是否有任何 Oracle 设置 sqlnet ora 或某种环境变量 可
  • 绑定和连接之间有什么关系?

    我的印象是 gt gt 由 Haskell 使用 和join 数学家更喜欢 是 相等的 因为一个可以用另一个来写 import Control Monad join join x x gt gt id x gt gt f join fmap
  • 是否值得对数据库中的电子邮件地址进行加密?

    我已经在使用了加盐哈希 http www matasano com log 958 enough with the rainbow tables what you need to know about secure password sch
  • 用vb6实现多线程

    我的任务是通过连接到电脑的多个串行端口实现自动化过程 我如何使用 vb6 实现多线程 以通过附加的串行端口独立执行一些自动化任务 提前致谢 不 vb6 不支持多线程 它通过破解 winapi 在 vb5 中工作 但在 vb6 中完全被破坏
  • JSF不支持跨域验证,有解决方法吗?

    JSF 2 0 只允许您验证一个字段上的输入 例如检查它是否具有特定长度 它不允许您有一个表格 其中显示 输入城市和州 或仅输入邮政编码 你是怎么解决这个问题的 我只对涉及 JSF 验证阶段的答案感兴趣 我对将验证逻辑放入托管 Bean 不
  • 交叉验证 SPARK 期间的自定义评估器

    我的目标是向 CrossValidator 函数 PySpark 添加基于排名的评估器 cvExplicit CrossValidator estimator cvSet numFolds 8 estimatorParamMaps para
  • Angular 2子路由会刷新父路由吗

    我有一个应用程序 在某些情况下 我在父路线的子路线之间进行路线 一个看起来像example com a 1 其他example com a 2 将从切换1 to 2触发页面的重新加载 渲染a 就像播放视频一样a并且有一个与该视频同级的路线出
  • equals 和 hashCode 的通用反射辅助方法

    我正在考虑为 equals 和 hashCode 创建一个反射辅助方法 在 equals 的情况下 辅助方法会通过反射 API 查找 objectA 的字段 并将它们与 objectB 的字段进行比较 对于 hashCode 辅助方法会检查
  • Common Lisp 中的 comma-comma-at

    我对 comma comma at 的作用感到困惑 使用 comma comma at 的示例如下定义 Lisp 宏时是否需要使用双引号 双逗号 https stackoverflow com questions 17938242 is t
  • 注册DLL时出错

    我正在尝试使用命令 regsvr32 dll name dll 注册 DLL 但出现以下错误 模块 Addition dll 已加载 但 找不到入口点 DLLRegisterServer 确保 Addition dll 是有效的 DLL 或
  • AppleScript 和 Mail.app:检查新消息是否包含字符串

    我正在编写一个脚本来检查是否已提交特定的网络表单 到目前为止 脚本内容如下 tell application Mail check for new mail set newmail to get the unread count of in
  • 将 Json String 反序列化为多种 Object 类型

    我有一个从网络服务获得的 Json 字符串 它有一个集合列表 每个集合代表一个对象 例如 Root List First Collection Team Object id 1 team name Equipe Saidi is activ
  • 找不到驱动器 ID。您有权查看此文件吗? Android 谷歌驱动器集成

    我正在使用以下代码github https github com googledrive android demos blob master src com google android gms drive sample demo Edit
  • 基于判别器的 Typescript 窄参数类型

    我有一个旧版 API 如下所示 游乐场链接 https www typescriptlang org play code C4TwDgpgBAwg9gWwQQwHYBMCMUC8UDeAUFCVAMYLoBcUARAiFAGYCWATgM7
  • Django 使用证书身份验证连接到 Postgresql

    在 Django 1 9 中 我必须在 settings py 中进行哪些更改才能使用证书身份验证连接到 postgresql 数据库 将其添加到settings py为我工作 import os DATABASES default ENG
  • 使用 python 删除/替换多行代码部分

    我试图在 python 的帮助下从各种文件中删除包含废弃代码片段的多行 我寻找了一些例子 但无法真正找到我想要的东西 我基本上需要的是原则上执行以下操作 包含非 python 语法 def cleanCode filepath Clean
  • 如何构造一个数组以首先比较然后添加输入

    由于是 React 和 js 的初学者 我很难正确构建数组 我在网上找到一篇文章 说使用concat方法可以构造一个数组 我也遵循同样的技术 但我的问题是它附加数据并比较是否已经存在相同的数据 我想在附加到数组之前比较数据 这样就不会有重复
  • 右值引用和左值引用作为参数之间的区别

    读完帖子后 http www cprogramming com c 11 rvalue references and move semantics in c 11 html http www cprogramming com c 11 rv