C ++继续函数返回?

时间:2018-01-24 18:57:55

标签: c++ move-semantics c++17

我有以下代码:

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。因此,这不是重复。

0 个答案:

没有答案