小编jos*_*var的帖子

运算符+需要Move构造函数

我无法编译附加项目,因为删除了move构造函数。

这是预期的行为吗?如果编译器不使用move构造函数,为什么还要使用它呢?

Windows-Visual Studio 2015 14.0.25431.01更新3

#include <string>
#include <sstream>
#include <vector>

class poo {
public:
  poo() = default;
  poo(poo&&) = delete; //deleted function
  virtual ~poo() = default;

  poo operator +(const poo &a) const {
    poo to_return;
    to_return._s += a._s;
    return to_return;
    //moveconstructors.cpp(14): error C2280: 'poo::poo(poo &&)': attempting to reference a deleted function
  }
private:
  std::string _s;
};

int main(int, char **) {
  poo a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑1:添加“ poo(const poo&)= default;”后,也会发生相同的结果

编辑2:Windows-Visual Studio 2019 16.1.0 Preview 2.0也会发生相同的结果

编辑3:添加/修改后发生相同的结果

  poo(const …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2015 visual-studio-2019

5
推荐指数
2
解决办法
136
查看次数