14

が使用されているコードに出くわしましたstd::forward。私は長い間それについてグーグルで調べてきましたが、その本当の目的と使用法を理解できませんでした.

stackoverflow で同様のスレッドを見たことがありますが、まだ明確ではありません。誰かが簡単な例で説明できますか?

PS: このページを読みましたが、まだその使用法を理解できていません。この質問の重複にフラグを立てないでください。むしろ、私を助けてください。

4

4 に答える 4

4

各式は、左辺値または右辺値の 2 つの値カテゴリのいずれかに属します。

通常、次のような関数を呼び出す場合:

template<typename T>
void f(T t);

template<typename T>
void g(T t)
{
    f(t);
}

gローカル変数のような名前付きパラメーターは常に左辺値であるため、引数の値カテゴリはg と f の呼び出しの間で失われます。

パラメータを使用std::forwardして、参照の折りたたみを使用する「ユニバーサル参照」に調整することで、値カテゴリを保持できます。

template<typename T>
void f(T&& t);

template<typename T>
void g(T&& t)
{
    f(forward<T>(t));
}

値カテゴリを失うのではなく、「転送」しているため、「転送」と呼ばれるのはそのためです。

したがって、この例gで右辺値を指定して呼び出すと、f は左辺値ではなく右辺値を指定して呼び出されます。

于 2013-09-04T16:23:59.863 に答える