C++:如果我不声明移动构造函数,则会调用复制构造函数,但如果我删除移动构造函数 - 编译错误 - 为什么?

问题描述 投票:0回答:1
struct X
{
    X() = default;
    
    X(const X& src)
    {
        cout << "copy" << endl;
    }
};

int main()
{
    X x1;
    
    X x2(move(x1));
}

输出: 复制

struct X
{
    X() = default;
    
    X(const X& src)
    {
        cout << "copy" << endl;
    }
    
    X(X&& src) = delete;
};

int main()
{
    X x1;

    X x2(move(x1));
}

编译错误:

error: use of deleted functionX::X(X&&)28 |     X x2(move(x1));
      |                  ^

所以我很困惑。当我没有编写移动构造函数时 - 看起来它没有生成移动构造函数,因为它调用了我的复制构造函数。但是为什么当我显式删除第一个动作时却报错呢?

c++ move copy-constructor default-constructor move-constructor
1个回答
0
投票

明确地

delete
ing move ctor 通知编译器故意不允许移动操作。因此,如果遇到一个,就会引发错误。

另一方面,不声明它(五巨头规则)会使其回退到复制构造函数,因为左值引用可以绑定到右值。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.