が使用されているコードに出くわしましたstd::forward
。私は長い間それについてグーグルで調べてきましたが、その本当の目的と使用法を理解できませんでした.
stackoverflow で同様のスレッドを見たことがありますが、まだ明確ではありません。誰かが簡単な例で説明できますか?
PS: このページを読みましたが、まだその使用法を理解できていません。この質問の重複にフラグを立てないでください。むしろ、私を助けてください。
各式は、左辺値または右辺値の 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 は左辺値ではなく右辺値を指定して呼び出されます。