C++11 无法将临时对象传递给移动构造函数

C++11 无法将临时对象传递给移动构造函数,c++11,C++11,我试图接受C++11中的右值,我遇到了这种奇怪的情况。据我所知,调用foomyfoo(foo())将创建一个临时foo,然后将其移动到myfoo 然而,VisualStudio2015告诉我,当我尝试编译时,myfoo并不存在。这是虫子吗 #include<iostream> using namespace std; class foo { static int n; int id; public: foo() :id(n) { ++n; cout <

我试图接受C++11中的右值,我遇到了这种奇怪的情况。据我所知,调用foomyfoo(foo())将创建一个临时foo,然后将其移动到myfoo

然而,VisualStudio2015告诉我,当我尝试编译时,myfoo并不存在。这是虫子吗

#include<iostream>
using namespace std;

class foo
{
    static int n;
    int id;
public:
    foo() :id(n) { ++n; cout << "Created: " << id << endl; }
    foo(foo &o) :id(o.id) { cout << "Copy: " << id << endl; }
    foo(foo &&o) :id(o.id) { cout << "Move: " << id << endl; }
    ~foo() { cout << "Destroy: " << id << endl; }
    void bar (){cout << "I am: " << id << endl; }
};
int foo::n = 0;

int main()
{
    foo myfoo (foo());
    myfoo.bar();
    return 0;
}
#包括
使用名称空间std;
福班
{
静态int n;
int-id;
公众:

()(ID){ ++n;cOut它是最烦琐解析的一个实例。C++解释MyFo构造作为一个函数返回FO与FO参数。

要解决这个问题,需要在临时foo()周围加上括号

或使用初始化列表:

foo myfoo { foo() };

哇。我不认为需要括号。当我使用foo myfoo(foo())时会发生什么?这是无效的语法吗?
foo myfoo { foo() };