C++ std::move上发生了不必要的转换

C++ std::move上发生了不必要的转换,c++,c++11,stdarray,uniform-initialization,C++,C++11,Stdarray,Uniform Initialization,为什么编译器认为我试图在下面的代码中将Container类型的对象转换为MoveTest类型的对象?为什么带括号的构造函数被转发到move\u things变量?用()替换{}当然可以解决问题 #include <iostream> #include <array> using namespace std; static constexpr int NUMBER{2}; class MoveTest { public: MoveTest(const MoveTes

为什么编译器认为我试图在下面的代码中将
Container
类型的对象转换为
MoveTest
类型的对象?为什么带括号的构造函数被转发到
move\u things
变量?用
()
替换
{}
当然可以解决问题

#include <iostream>
#include <array>
using namespace std;

static constexpr int NUMBER{2};

class MoveTest {
public:
  MoveTest(const MoveTest&) {
    cout << "MoveTest(const MoveTest&)" << endl;
  }
  MoveTest(MoveTest&&) {
    cout << "MoveTest(MoveTest&&)" << endl;
  }
  MoveTest() {
    cout << "MoveTest()" << endl;
  }
};

class Container {
public:
  Container() = default;
  Container(Container&&) = default;
  Container(const Container&) = default;
  std::array<MoveTest, NUMBER> move_things;
};

int main() {
  Container container;
  __attribute__((unused)) Container another_one{std::move(container)};

  return 0;
}

这段代码在G++5.3.0上编译得很好。您使用哪种编译器?请参阅@MattiaF。刚刚编辑的问题
{}
是这里的聚合初始化。它试图构建你的
move\u东西数组
这段代码在G++5.3.0上编译得很好。您使用哪种编译器?请参阅@MattiaF。刚刚编辑的问题
{}
是这里的聚合初始化。它试图构建你的
move\u事物数组
Could not convert ‘std::move<Container&>((* & container))’ from ‘std::remove_reference<Container&>::type {aka Container}’ to ‘MoveTest`
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)