私のコードはなぜコンパイラは戻り値を移動する代わりにコピーしようとしていますか?
// definition of class 'Foo'
class Foo
{
private:
vector<Bar> v;
public:
...
Foo(Foo&&) = default; // move constructor
};
// definition of function 'f'
Foo f()
{
Foo x;
DoStuff(x);
return x;
}
// Somewhere in main
result = f(); // I am aiming to move 'x' to 'result'
私は
EAL_1.6.cpp:314:13: error: object of type 'Foo' cannot be assigned because its copy assignment operator is implicitly deleted
x = f(x);
^
EAL_1.6.cpp:232:5: note: copy assignment operator is implicitly deleted because 'Foo' has a user-declared move constructor
Foo(Foo&&) = default;
^
を受けるコンパイルしようとすると私は
return move(x);
を試すように誘惑されたが、応じ巧妙な解決策であるようには見えないように見えますthis postに私は、コンストラクタが移動コンストラクタ(this postで説明)を定義するときに削除されることを理解していますが、 'x'を 'result'に移動することをコンパイラに指示する方法を理解できません。
エラーとコードは全く異なる2つのことを示しています。また、「バー」とは何ですか? – 0x499602D2
あなたは 'Foo&operator =(Foo &&)= default;'を持っていますか?それは暗黙的に生成されないためです。 – krzaq