gpt4 book ai didi

c++ - 为什么定义了移动构造函数而隐式删除了赋值运算符?

转载 作者:太空狗 更新时间:2023-10-29 19:47:46 24 4
gpt4 key购买 nike

struct Foo
{
Foo() = default;
Foo(Foo&&) = default;
};

int main()
{
Foo a, b;
a = b;
// ^

return 0;
}

错误:使用已删除的函数 'Foo& Foo::operator=(const Foo&)'

在 g++4.6 -std=c++0x 中没问题。但是,在 g++6.2 -std=c++11 中是错误的。为什么?

最佳答案

答案是因为 C++ 标准是这样说的:

[class.copy]

If the class definition does not explicitly declare a copy constructor, one is declared implicitly. If the class definition declares a move constructor or move assignment operator, the implicitly declared copy constructor is defined as deleted; otherwise, it is defined as defaulted (8.4).

在您的情况下,您始终可以声明一个默认的复制构造函数:

 Foo(const Foo&) = default;

关于c++ - 为什么定义了移动构造函数而隐式删除了赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com