0

現在、完全転送について読んでいますが、完全転送の目的は、左辺値を左辺値として、右辺値を右辺値として渡すことであると述べています。したがって、次の例を使用して完全な転送を理解しています。ここのfooオブジェクトには、コピーと移動の cnstr があり、コピーと移動の代入演算子もあります。

void mfoo(foo arg)
{
    .......
}


template<typename T>
void relay(T&& arg)
{
    mfoo(std::forward<T>(arg));
}


//Start here
foo f;
relay(std::move(f));

現在、VS2012 でこのコードをテストしており、move コンストラクターは一度だけ呼び出されます。私はそれが2回呼び出されることを期待していました。誰かが私にこれを説明できれば幸いです。最初の移動コンストラクターがリレーで呼び出され、次の移動コンストラクターが mfoo で呼び出されることを期待していました

4

1 に答える 1