0
我试图用C++ 11中的右值来解决这个问题,并且我遇到了这种奇怪现象。据我所知,调用foo myfoo(foo())会创建一个临时foo,然后将其移至myfoo。无法将临时对象传递给移动构造函数
但是,Visual Studio 2015告诉我,当我尝试编译时,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;
}
哇。没想到括号是需要的。当我使用foo myfoo(foo())时会发生什么?这是无效的语法? – bot1131357