0
私はC++ 11でrvalueという用語を使用しようとしていますが、私はこの奇妙なことに遭遇します。私が理解しているように、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()
または使用初期化リストの周りに追加のかっこを配置する必要があります。大括弧が必要だとは思わなかった。 foo myfoo(foo())を使用するとどうなりますか?それは無効な構文ですか? – bot1131357