std::forward が左辺値参照と右辺値参照の完全な転送を容易にする方法
C では、 std::forward が重要な役割を果たします。完全転送。元の値カテゴリが保持された状態で引数が関数に渡されることが保証されます。この動作は、左辺値参照と右辺値参照を扱う場合に特に混乱を招く可能性があります。
左辺値と右辺値の区別
"名前がある場合、それは左辺値です。"このことわざは一般的に当てはまりますが、thing&& x と thing& x.
Lvalue References (thing& x)
を処理するときの std::forward の動作を完全に説明しているわけではありません。 ]引数が左辺値参照によって渡される場合、それは関数内で左辺値参照のままになります。左辺値参照は常に、特定の名前付きメモリの場所にバインドされます。
右辺値参照 (thing&& x)
対照的に、引数が右辺値参照によって渡される場合、右辺値参照または変換された左辺値参照のいずれかになります。右辺値参照は、一時オブジェクトまたは移動される値にバインドされます。
std::forward の仕組み
std::forward は特別な関数によって定義されます。換算表。その主な目的は、任意の型の参照を右辺値参照に変換することです。この変換によって、元の引数の値カテゴリは変更されません。
例: std::forward を使用した完全転送
T&& 引数を受け入れるテンプレート関数perfectSet を考えます。 :
templatevoid perfectSet(T&& t) { set(std::forward (t)); }
ここで、perfectSet が左辺値を使用して呼び出されるとき、インスタンス化された関数の型 T は T& として推論されます。 std::forward 変換により、引数が左辺値参照として設定に渡されることが保証されます。 完璧なセット(v); // 左辺値参照は set
std::vectorv; perfectSet(v); // lvalue reference passed to set
perfectSet(makeAndFillVector()); // rvalue 参照は set
perfectSet(makeAndFillVector()); // rvalue reference passed to set結論に渡されます
std::forward は、関数に渡される引数の値カテゴリを保持することで完全転送を容易にする強力なツールです。これにより、効率的かつタイプセーフな値の転送が可能になり、最適なパフォーマンスとコードの正確性が確保されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3