提供用户定义的移动构造函数时,Visual Studio 2013不会删除副本构造函数

gd1

我感谢C ++ 11标准规定:

如果类定义未明确声明一个副本构造函数,则将隐式声明一个副本构造函数。如果类定义声明了move构造函数或move赋值运算符,则隐式声明的copy构造函数定义为delete否则,将其定义为默认值。

(实际上是从此处复制的

如下代码:

#include <iostream>

struct C
{
    int x = 1;

    C()
    {
    }

    C(C&&)
    {
    }
};

int main()
{
    const C c;
    C c2(c);

    std::cout << c.x << " " << c2.x << std::endl;

    return 0;
}

不能在上编译gcc 4.9.0,但可以在Visual Studio 2013(Compiler Version 18.00.21005.1 for x86上正常编译这是Visual Studio又一次违反标准吗,还是这次我做错了什么?如果这违反了标准,是否存在跟踪错误或记录此行为的任何来源?

博格丹

您没有做错任何事情,并且您对该标准的解释是正确的。Visual C ++ 2013确实不能正确实现这些规则。

相关的错误报告在这里:

即使定义了自定义移动构造函数,也会生成默认的复制构造函数[c ++ 11]

标记为Won't Fix,开发团队的评论是:

实际上,Visual Studio 2013并未完全实现用于管理特殊成员函数和移动操作的C ++ 11规则。在Visual Studio的下一个主要版本中,我们将包含针对此错误的修复程序。

好消息是,Visual C ++ 2015 RC中似乎一切正常。我刚刚验证了您的代码会触发编译器和IntelliSense错误。编译器诊断为:

error C2280: 'C::C(const C &)': attempting to reference a deleted function

(根据我过去几个月的测试,MSVC14正在成为一个非常不错的C ++编译器-已解决了许多标准合规性问题。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

默认移动构造函数Visual Studio 2015

来自分类Dev

为什么当用户提供移动构造函数或移动分配时,复制构造函数和复制分配会被删除?

来自分类Dev

Visual Studio 2013(更新3)中的默认Move构造函数

来自分类Dev

删除副本构造函数会导致删除默认构造函数

来自分类Dev

创建用户定义的副本构造函数时无法创建对象

来自分类Dev

C ++ / Visual Studio中的构造函数

来自分类Dev

在Visual Studio 2013中填充构造函数变量的快捷方式是什么?

来自分类Dev

异步不会在Visual Studio 2015中调用move构造函数

来自分类Dev

继承副本构造函数

来自分类Dev

在android studio中构建签名的apk时出错:此类应提供默认的构造函数

来自分类Dev

在android studio中构建签名的apk时出错:此类应提供默认的构造函数

来自分类常见问题

如何为构造函数自定义Visual Studio的私有字段生成快捷方式?

来自分类Dev

用户定义的左值引用类型成员的移动构造函数

来自分类Dev

C ++显式通用引用构造函数不会隐藏副本构造函数吗?

来自分类Dev

C ++显式通用引用构造函数不会隐藏副本构造函数吗?

来自分类Dev

调用LLVM中隐式删除的副本构造函数

来自分类Dev

错误:调用“ Cadena”的隐式删除副本构造函数

来自分类Dev

隐式与显式删除副本构造函数

来自分类Dev

gmock调用到隐式删除的副本构造函数

来自分类Dev

当存在用户定义的析构函数时,如何禁用隐式定义的副本构造函数的生成

来自分类Dev

Visual Studio中的构造函数依赖关系代码段

来自分类Dev

Visual Studio 2015中的“无法引用默认构造函数”

来自分类Dev

迁移到Visual Studio 2015构造函数.create后

来自分类Dev

定义的副本构造函数c ++的默认行为

来自分类Dev

移动构造函数-默认构造函数VS 2013的类型无效

来自分类Dev

模板化构造函数可以代替已删除的副本构造函数吗?

来自分类Dev

自己调用副本构造函数

来自分类Dev

链表副本构造函数C ++

来自分类Dev

扩展默认副本构造函数

Related 相关文章

  1. 1

    默认移动构造函数Visual Studio 2015

  2. 2

    为什么当用户提供移动构造函数或移动分配时,复制构造函数和复制分配会被删除?

  3. 3

    Visual Studio 2013(更新3)中的默认Move构造函数

  4. 4

    删除副本构造函数会导致删除默认构造函数

  5. 5

    创建用户定义的副本构造函数时无法创建对象

  6. 6

    C ++ / Visual Studio中的构造函数

  7. 7

    在Visual Studio 2013中填充构造函数变量的快捷方式是什么?

  8. 8

    异步不会在Visual Studio 2015中调用move构造函数

  9. 9

    继承副本构造函数

  10. 10

    在android studio中构建签名的apk时出错:此类应提供默认的构造函数

  11. 11

    在android studio中构建签名的apk时出错:此类应提供默认的构造函数

  12. 12

    如何为构造函数自定义Visual Studio的私有字段生成快捷方式?

  13. 13

    用户定义的左值引用类型成员的移动构造函数

  14. 14

    C ++显式通用引用构造函数不会隐藏副本构造函数吗?

  15. 15

    C ++显式通用引用构造函数不会隐藏副本构造函数吗?

  16. 16

    调用LLVM中隐式删除的副本构造函数

  17. 17

    错误:调用“ Cadena”的隐式删除副本构造函数

  18. 18

    隐式与显式删除副本构造函数

  19. 19

    gmock调用到隐式删除的副本构造函数

  20. 20

    当存在用户定义的析构函数时,如何禁用隐式定义的副本构造函数的生成

  21. 21

    Visual Studio中的构造函数依赖关系代码段

  22. 22

    Visual Studio 2015中的“无法引用默认构造函数”

  23. 23

    迁移到Visual Studio 2015构造函数.create后

  24. 24

    定义的副本构造函数c ++的默认行为

  25. 25

    移动构造函数-默认构造函数VS 2013的类型无效

  26. 26

    模板化构造函数可以代替已删除的副本构造函数吗?

  27. 27

    自己调用副本构造函数

  28. 28

    链表副本构造函数C ++

  29. 29

    扩展默认副本构造函数

热门标签

归档