移动赋值运算符和移动构造函数之间的区别?

2024-03-14

一段时间以来,这一直让我感到困惑。而且到目前为止我还没有找到满意的答案。问题很简单。什么时候有一个move assignment operator接到电话,什么时候move constructor operator接到电话吗?

cppreference.com 上的代码示例产生以下有趣的结果:

移动赋值运算符: http://en.cppreference.com/w/cpp/language/move_operator

a2 = std::move(a1); // move-assignment from xvalue

移动构造函数: http://en.cppreference.com/w/cpp/language/move_constructor

A a2 = std::move(a1); // move-construct from xvalue

那么这与实施的内容有关吗?如果是的话,如果两者都实现了,会执行哪一个?如果无论如何都是相同的,为什么有可能创建移动赋值运算符重载。


仅当构造对象时才会执行移动构造函数。移动赋值运算符在先前构造的对象上执行。这与复制案例中的场景完全相同。

Foo foo = std::move(bar); // construction, invokes move constructor
foo = std::move(other); // assignment, invokes move assignment operator

如果您没有显式声明它们,编译器会为您生成它们(有一些例外,其列表太长,无法在此处发布)。

See this http://www.slideshare.net/ripplelabs/howard-hinnant-accu2014有关何时隐式生成移动成员函数的完整答案。

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

移动赋值运算符和移动构造函数之间的区别? 的相关文章

  • 警告:从指针目标类型中丢弃“const”限定符

    没有const char s意味着 s 是一个指向常量 char 的指针 那么为什么它给我这个警告 我并不是想改变价值观 在第一个函数中警告是return discards const qualifiers from pointer tar
  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • ProtoBuf-net AsReference 需要 Activator.CreateInstance 中的公共构造函数吗?

    在我的两门课程中 看起来像这样 最少 using System using System Collections Generic using System Collections using System ComponentModel us
  • .NET Windows 服务中调用 C# 的 wait 的 I/O 回调是否可以不阻塞?

    我知道在 ASP NET 中 当使用 wait 时工作线程会返回到池中 而 I O 发生在后台 这对于可扩展性非常有用 我的 Windows 服务是一个套接字服务器 它使用 Begin End 样式的异步套接字 I O 混合我的魔法 我知道
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • C++ 模板参数类型推断

    我有一个这样的C 模板 template
  • 未定义异常变量时通过引用捕获

    捕获异常时 标准指导是按值抛出 按引用捕获 据我了解 这有两个原因 如果由于内存不足异常而引发异常 我们将不会调用可能终止程序的复制构造函数 如果异常是继承层次结构的一部分 我们可能会对异常进行对象切片 如果我们有一个场景 我们没有在 ca
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • 从 ef core 的子集合中删除一些项目

    我有一个父表和子表 其中父表与子表具有一对多关系 我想删除一些子项 并且希望父项的子集合反映该更改 如果我使用删除选定的子项RemoveRange 那么子集合不会更新 如果我使用Remove从子集合中删除子集合然后 显然 它不如使用效率高R
  • 使用对象列表构建树

    我有一个带有属性 id 和parent id 的对象列表 我想建造一棵树来连接那些孩子和父母 1 个父对象可以有多个子对象 并且有一个对象将成为所有对象的祖先 实现该功能最快的算法是什么 我使用 C 作为编程语言 但其他语言也可以 像这样的
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product

随机推荐

  • 我想用 C# 在堆栈上分配一个对象

    假设我有这个 C 类 public class HttpContextEx public HttpContext context null public HttpRequest req null public HttpResponse re
  • doesNotExist at /en-us/ 模板标记无法找到带有查找参数 `{'reverse_id': u'home', 'site': 1} ` 的页面

    我目前正在查看 django cms demo 我一直在使用这里找到的代码 https github com andrewschoen django cms demo tree master demo https github com an
  • Oracle 中的视图是什么?

    Oracle 中的视图是什么 A 在 Oracle 中查看在其他数据库系统中 它只是存储在内存中的 SQL 语句的表示形式 以便可以轻松地重复使用 例如 如果我们经常发出以下查询 SELECT customerid customername
  • Google App Engine TextProperty 和 UTF-8:何时编码/解码

    我使用的是带有 Django 模板和 Webapp 框架的 Google App Engine 2 5 db TextProperty UTF 8 Unicode 和解码 编码让我很困惑 我非常感谢一些专家可以提供一些建议 我用谷歌搜索了一
  • NvAPI NVAPI_INTERFACE 缺少显式类型

    我是 c cli 新手 想为 nvapi 编写一个小型托管包装器 现在 当尝试访问某些功能时 例如 NvAPI Initialize Visual Studio 告诉我该函数未定义 include nvapi h NvAPIStatus N
  • 是否可以使用 popcorn JS 导出带有视频叠加评论的视频?

    我正在使用 porpcorn JS 在视频上添加注释 我在视频上创建了叠加层 并且所有注释都在视频上呈现 有什么方法可以导出嵌入 html 内容的视频吗 mp4 文件 那么我可以在任何本机播放器 例如 VLC 中播放该视频吗 你最擅长处理它
  • c++ - 抽象类的迭代器

    我有一个抽象类 例如代表几何形状的类 我将有继承自的具体类Shape 例如矩形和三角形 我想迭代形状组成的点 另一个类 所以Shape必须为其提供一个接口 迭代应该是这样的 for Point p shapeObject some code
  • 访问类库中的 Mustoverride 属性时出现 AccessViolationException

    这有点复杂 但我会尽力解释清楚 我有一个通用代码组件的类库 我尝试做一些常见的ConfigurationHandler基类 以简化创建自定义配置部分 集合和元素 我最终得到的是 The ConfigurationSectionBase类是通
  • Ansible 截断连接字符串

    我正在 Ansible 中生成一个 yaml 模板 并尝试截断两个连接的字符串 这里以下代码不起作用 因为连接没有正确地通过管道传输到 regex replace 中 我只想要前 n 个字符 本例中为前 10 个字符 通常我可以将这两个组合
  • XPages - onkeypress 事件未正确触发点击

    我使用 Xpages 自定义控件创建了一个搜索字段 id searchField 和一个搜索按钮 id searchButton 我在搜索字段上添加了一个 onkeypress 事件 这样它将触发对 searchButton 的单击 然后
  • 如何在图标后对齐多行文本

    在带有缩进 树数据 的表格中 我需要将第二行与第一行对齐 请注意 文本 Tail 与 Long 不对齐 在这里创建了一个类似的例子 div width 400px div a href ICon a span This is my figh
  • Firefox:“加载脚本时出错”

    如果我 快速单击 网站上的不同链接 Asp Net MVC jQuery 完整回发 FireFox 3 下会出现 加载脚本错误 重现这个错误是相当容易的任务 但我不明白为什么会发生 每次它都会显示不同的失败脚本文件 所有 JavaScrip
  • Linux 中的 itoa 函数在哪里?

    itoa 是将数字转换为字符串的非常方便的函数 Linux下好像没有itoa 是否有等效的功能或者我必须使用sprintf str d num 编辑 抱歉 我应该记得这台机器绝对是非标准的 已经插入了各种非标准libc用于学术目的的实现 A
  • 从 pandas 数据框中删除句子长于特定单词长度的行

    我想从 pandas 数据框中删除行 其中包含特定列中长度大于所需长度的字符串 例如 输入帧 X Y 0 Hi how are you 1 An apple 2 glass of water 3 I like to watch movie
  • python正则表达式重复与捕获问题

    使用python3的正则表达式功能 是否可以根据找到的重复次数来捕获可变数量的捕获块 例如 在以下搜索字符串中 我想使用相同的正则表达式捕获所有数字字符串 搜索字符串 1 尝试捕获 89 45 zzz89zzz45 mp3 搜索字符串 2
  • 列名必须是字符串或数组 yii

    我在访问 yii 的网络应用程序时遇到了一些困难 我的配置与所有者的设置相同 但是当我尝试访问时 出现错误 列必须是字符串或数组 我该如何解决它 提前致谢 报告错误消息时 获得准确的错误消息会很有帮助 实际的错误消息是 列name必须是字符
  • 允许在 Mac OS X 应用程序中读取文件的权利是什么? (拒绝文件读取数据错误)

    我正在制作一个 Mac OS X 应用程序 沙盒 它从 etc myfolder 中安装的配置文件读取 当我尝试使用 NSFileHandle 读取文件时 我在控制台中收到以下错误 sandboxd 3251 MyApp 3251 deny
  • 文件上传到文件流

    我正在将文件与 HttpWebRequest 一起发送 我的文件将来自 FileUpload UI 这里我需要将文件上传转换为文件流 以将流与 HttpWebRequest 一起发送 如何将 FileUpload 转换为文件流 由于 Fil
  • 以编程方式获取完整的 Ruby 版本?

    我知道可以通过以下方式获取 Ruby 版本 例如 1 9 3 RUBY VERSION持续的 但是 我想知道如何确定确切的版本 例如 1 9 3 p0 原因是 Ruby 1 9 3 的早期版本中存在一个未修复的错误 该错误在更高版本中起作用
  • 移动赋值运算符和移动构造函数之间的区别?

    一段时间以来 这一直让我感到困惑 而且到目前为止我还没有找到满意的答案 问题很简单 什么时候有一个move assignment operator接到电话 什么时候move constructor operator接到电话吗 cpprefe