C++11“不可移动”类型[重复]

2023-11-22

可能的重复:
为什么 C++11 删除的函数参与重载决策?

我对以下 C++11 代码有两个问题:

#include <iostream>

using namespace std;

struct A {
  A()  { cout << "Default c-tor" << endl; }
  A(const A&)  { cout << "Copy c-tor" << endl; }
  A(A&&) = delete;
};

A f()
{
 A a;
 return a;
}

int main()
{
  A b = f();
  return 0;
}

使用 gcc 和 clang 时出现以下编译错误

gcc-4.7.2 (g++ --std=c++11 main.cpp):

main.cpp: In function ‘A f()’:
main.cpp:16:9: error: use of deleted function ‘A::A(A&&)’
main.cpp:8:2: error: declared here
main.cpp: In function ‘int main()’:
main.cpp:21:10: error: use of deleted function ‘A::A(A&&)’
main.cpp:8:2: error: declared here

clang-3.0 (clang++ --std=c++11 main.cpp):

main.cpp:19:4: error: call to deleted constructor of 'A'
        A b = f();
          ^   ~~~
main.cpp:8:2: note: function has been explicitly marked deleted here
        A(A&&) = delete;
        ^
1 error generated.
  • 如果显式删除移动构造函数,编译器不应该使用复制构造函数吗?
  • 有谁知道“不可移动”类型的用途吗?

提前致谢。


A(A&&) = delete;

将其声明并定义为delete仍然声明它,并且不会使其完全不存在。相反,它是similar(但不相同)声明它为空且私有。就像这样:

private: 
  A(A&&){}

事实上,这也是其他操作员之前有时使用的技巧= delete可用。 同样,它以查找的方式存在,但永远不允许调用它,并且在 C++ 中,调用权限(在几乎或所有情况下)是在其他所有事情(例如重载解析、名称查找)之后完成的。

标准实际上说(8.4.3)

删除的函数是隐式内联的。

并且(我发现)注意到已删除的函数不应参与名称查找。

另外,从 8.4.3

隐式或显式引用已删除函数的程序, 除了声明之外,格式不正确。 [注意:这包括调用 隐式或显式函数并形成指针或 指向函数成员的指针。它甚至适用于以下参考文献: 不可评估的表达式。

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

C++11“不可移动”类型[重复] 的相关文章

随机推荐

  • jquery:选择文本事件

    当用户选择一些文本 非文本区域或输入 时 jquery 是否可以调用我的回调来让我知道选择了哪个 div 的文本 并且如果选择焦点丢失也调用我的回调 Thanks 有点令人惊讶的是 没有简单的方法可以做到这一点 IE 有一个select在所
  • 提交表单中的 Laravel 日期格式 (d-M-Y)

    在刀片模板的提交表单中 我有以下日期表单 它与默认日期一起正常工作 例如Y m d 但我想显示日期d M Y 我试图找到一个可用的解决方案 但运气不佳 以下是适用于默认日期的代码 这是模型 public static rules birth
  • R根据条件创建因子

    我需要根据数值高于或低于 10 将列从数字更改为因子 例如 有以下数据 age lt c 1 20 hight lt c 1 20 d frame lt data frame age hight 我尝试了以下方法 d frame hight
  • Android GridView 带分隔符

    GridView 的元素之间可以有分隔符吗 Thanks 您可能需要使用填充和背景颜色 将表的背景设置为一种颜色 并将表中每个视图的背景设置为另一种颜色 在表中的每个视图周围设置 1 或 2 像素的填充 并且之间应该有边框
  • 如何在 Apple 的时钟应用程序中实现 Apple 的“贪睡”功能?

    我正在深入研究 iOS 开发 并正在构建自己的闹钟应用程序以熟悉该平台和 SDK 我目前正在学习的 API 之一是本地通知 API 我认为它与 Apple 用于在时钟应用程序中实现闹钟的 API 相同 我不明白的是他们如何实现 贪睡 功能
  • Heroku 与 Postgres 上的 ConnectionTimeoutError

    我在 Heroku 上部署的应用程序遇到问题 它在本地环境上运行良好 但部署到 Heroku 时经常会出现应用程序错误 日志中的异常是 ActiveRecord ConnectionTimeoutError 无法在 5 000 秒内获取数据
  • WCF、ASP.NET 成员资格提供程序和身份验证服务

    我编写了一个与 WCF 服务 BasicHttpBinding 通信的 Silverlight 2 应用程序 托管 Silverlight 内容的站点使用 ASP NET 成员资格提供程序进行保护 我可以使用 WCF 服务中的 HttpCo
  • 删除App时的委托方法

    当应用程序即将被删除时 iOS 中是否有委托方法 我正在尝试向服务器发送设备将不再接收通知的信息 不会 删除应用程序时不会触发委托方法
  • DeflatorInputStream 和 DeflatorOutputStream 不重建原始数据

    我想压缩一些数据 所以我遇到了 DeflatorInputStream 和 DeflatorOutputStream 类 但是 下面的示例表明 在使用这些类时我似乎无法重建原始数据 当我切换到 ZipInputStream 和 ZipOut
  • Java 比较数组

    我有两个未知类型的数组 有没有办法检查元素是否相同 public static boolean equals Object a Object b if a instanceof int return Arrays equals int a
  • python 可以读取电子表格中单元格的值吗?

    All python 可以读取电子表格中单元格的值吗 从绘图 GIS 分析的角度来看 最简单的示例是在给定 shapefile GIS 数据集 上运行缓冲区 邻近 工具的脚本 对于缓冲区距离参数 脚本将指向电子表格单元格中的值 首选 lib
  • 如何在我的应用程序中显示谷歌语音识别设置?

    我正在开发一个 Android 应用程序 其中实现了语音识别和 TTS 因此 我正在考虑启动 Google 语音识别和 TTS 的设置屏幕 以允许用户从应用程序内更改设置 我已经使用以下代码成功实现了 TTS 设置 intent new I
  • 按优先级从 MSMQ 获取消息

    我通过设置优先级在 MSMQ 中发送消息 使用 C 我可以先从 MSMQ 获取具有高优先级的消息吗 就像我们进入优先队列一样 还有一件事 假设有三个优先级 0 高 1 中等 2 低 队列中的序列是 2001122221111100 现在 如
  • Spring-Security:升级到 Spring-Security 4.1 后,登录时用户名发送为空

    我正在开发一个基于 Spring MVC 的应用程序 其中我们使用 Spring Security 进行登录 授权 我们之前使用的是3 2 5版本 升级为4 1 1 但升级后 登录机制被破坏 因为发送的用户名为空 我不知道出了什么问题 你能
  • 放置新的以推迟到不同的构造函数

    这安全吗 我在实际实现中没有使用任何虚拟函数 但我很想相信即使我使用了 它仍然是安全的 class Foo Foo initialize things Foo int new this Foo 当您输入左大括号时Foo int 构造函数 所
  • 什么是 GIT_WORK_TREE,为什么我从来不需要设置这个 ENV var,为什么现在呢?

    我在 Ubuntu Linux 下使用 Git 来同步和部署我的项目 我的本地 Linux 工作机上有一个存储库 服务器上有两个存储库 一个是裸存储库 另一个是已部署的应用程序 它总是工作正常 但现在我为我的其他网站创建了另一个存储库 我收
  • 在 WebBrowser 控件中设置输入标记的值

    我正在尝试帮助用户使用自定义登录他们的帐户WebBrowser控制 我正在尝试使用以下命令将输入 标签的值设置为玩家用户名WebBrowser s InvokeScript功能 但是 我当前的解决方案只是渲染一个空白的白页 我当前的代码如下
  • 重写mysql select以减少时间并将tmp写入磁盘

    我有一个 mysql 查询 需要几分钟的时间 这不是很好 因为它用于创建网页 使用三个表 海报数据包含有关各个海报的信息 poster categories 列出了所有类别 电影 艺术等 而 poster prodcat 则列出了 post
  • 如何修复 org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@779de014 已关闭问题

    我正在尝试使用 Hibernate 5 创建或更新用户 它抛出以下异常 org hibernate resource jdbc internal LogicalConnectionManagedImpl 779de014 已关闭 我正在使用
  • C++11“不可移动”类型[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 C 11 删除的函数参与重载决策 我对以下 C 11 代码有两个问题 include