我有以下代码:
class Foo {
public:
Foo() {}
explicit Foo(Foo &&other) noexcept {}
static Foo from() {
Foo f;
return f;
}
};
当我用g++ --std=c++17 move.cpp
编译它时,我收到以下错误:
move.cpp: In static member function 'static Foo Foo::from()':
move.cpp:8:12: error: use of deleted function 'constexpr Foo::Foo(const Foo&)'
return f;
^
move.cpp:1:7: note: 'constexpr Foo::Foo(const Foo&)' is implicitly declared as deleted because 'Foo' declares a move constructor or move assignment operator
class Foo {
^~~
我认为函数应该在编译语句return f
时移动Foo(因此,它应该使用声明的移动构造函数,对吧?)。但是,看起来它正在寻找一个复制构造函数。有人可以解释一下这里发生了什么吗?
编辑:此问题被标记为this one的重复。但是,这个问题是关于C ++ 17,而另一个是关于C ++ 11 / C ++ 14。因此,这不是重复。