移动构造函数未调用

用户名

在尝试编写有关移动构造函数的示例之后,我遇到了以下代码:

#include <utility>
#include <iostream>

using namespace std;

class Data
{
public:
    Data()
    : x (3)
    {
        cout << "Data()" << endl;
    }
    Data(Data&&)
    : x(4)
    {
        cout << "Data(&&)" << endl;
    }

int x;
};

int main()
{
    Data a;
    Data b (std::move(a));
    cout << b.x << endl;
    return 0;
}

为什么在这里未调用move构造函数?程序打印:

数据()

3

我发现甚至更奇怪的是,通过添加复制构造函数,突然,它确实调用了移动构造函数...

    Data(const Data&)
    : x(2)
    {
        cout << "Data(copy)" << endl;
    }

现在它将打印

数据(&&)

4

PS我正在使用GCC 4.4.5

马特乌斯·格热耶克(Mateusz Grzejek)

好吧,您的代码对我来说正常工作。请参阅此示例

输出:

Data()
Data(&&)
4

按照标准说:

每当从相同类型的xvalue初始化对象时,都会调用move构造函数,其中包括

  • 初始化,T a = std::move(b);T a(std::move(b));,其中b类型为T
  • 功能参数传递:f(std::move(a));,其中,a是类型的Tfvoid f(T t)
  • 函数返回:return a;在诸如之类的函数内部T f(),其中a是T类型的,具有移动构造函数。

std::move获取对其参数的右值引用,并将其转换为xvalue

我认为您没有描述任何行为的理由。也许您的编译器有问题?


编辑

看来,这确实是编译器的错。建议N3053(“定义移动特殊成员功能”)描述了移动功能的定义。正如我们在此页的表中所看到的

在此处输入图片说明

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

构造函数未调用

来自分类Dev

尚未调用移动构造函数

来自分类Dev

未调用C ++构造函数

来自分类Dev

C ++构造函数未调用

来自分类Dev

复制构造函数未调用

来自分类Dev

静态构造函数未调用

来自分类Dev

为什么调用复制构造函数而不是移动构造函数?

来自分类Dev

为什么调用复制构造函数而不是移动构造函数?

来自分类Dev

移动用lambda调用的构造函数

来自分类Dev

如何强制调用移动构造函数(C ++)?

来自分类Dev

移动构造函数的意外调用

来自分类Dev

如何强制调用移动构造函数(C ++)?

来自分类Dev

移动用lambda调用的构造函数

来自分类Dev

为什么要调用移动构造函数?

来自分类Dev

调用std :: move而不移动构造函数或移动分配

来自分类Dev

为什么未调用move构造函数?

来自分类Dev

DataFrame构造函数未正确调用!错误

来自分类Dev

模板类复制构造函数未调用

来自分类Dev

Python:DataFrame构造函数未正确调用

来自分类Dev

为什么未调用move构造函数?

来自分类Dev

Scala反射-未调用构造函数

来自分类Dev

类中未调用 PHP 构造函数

来自分类Dev

deque 推回未调用的默认构造函数

来自分类Dev

未正确调用 DataFrame 构造函数

来自分类Dev

移动构造函数不调用析构函数?

来自分类Dev

为什么构造函数未调用onCreate()函数

来自分类Dev

未调用复制构造函数的虚拟辅助函数

来自分类Dev

移动构造函数(错误:调用隐式删除的拷贝构造函数)

来自分类Dev

为什么在我的代码中调用复制构造函数而不是移动构造函数?