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