ホームページ > バックエンド開発 > C++ > ## C で std::forward を使用する必要があるのはどのような場合ですか?

## C で std::forward を使用する必要があるのはどのような場合ですか?

Barbara Streisand
リリース: 2024-10-24 18:25:02
オリジナル
838 人が閲覧しました

## When Should I Use std::forward in C  ?

std::forward による引数の転送

C 0x では、std::forward は引数を別の関数呼び出しに転送するために使用されます。これは、引数を明示的にコピーまたは移動する必要を避けたい場合に有利です。

std::forward の使用には、関数パラメーターでの &&& 表記の使用が含まれます。この表記法を使用すると、左辺値参照と右辺値参照の両方を引数として受け入れることができます。

次の例では:

<code class="cpp">template<class T>
void foo(T&&& arg) 
{
  bar(std::forward<T>(arg));
}</code>
ログイン後にコピー

std::forward(arg) 式により、引数がは、引数の型に応じて、左辺値または右辺値参照として bar 関数に転送されます。

ただし、すべての場合に std::forward を使用する必要はありません。これは、引数の参照型を保持する必要がある場合にのみ必要です。たとえば、右辺値参照を受け取らない関数がある場合は、std::forward を使用しないでください。

次の例では、

<code class="cpp">template<int val, typename... Params>
void doSomething(Params... args) {
  doSomethingElse<val, Params...>(args...);
}</code>
ログイン後にコピー

を使用する必要はありません。 doSomethingElse 関数は左辺値または右辺値参照を取ることができるため、std::forward を使用します。

ただし、右辺値参照を取る関数がある場合は、引数が右辺値として転送されるように std::forward を使用する必要があります。参考文献。例:

<code class="cpp">template<int val, typename... Params>
void doSomething(Params&&... args) {
  doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}</code>
ログイン後にコピー

この例では、引数が最初は左辺値参照であっても、引数が右辺値参照として転送されるようにするために std::forward が使用されています。

最後に、引数を複数回転送しないでください。これにより、未定義の動作が発生する可能性があります。たとえば、次のコードは正しくありません:

<code class="cpp">template<int val, typename... Params>
void doSomething(Params&&... args) {
  doSomethingElse<val, Params...>(std::forward<Params>(args)...);
  doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}</code>
ログイン後にコピー

この例では、引数が 2 回転送されるため、未定義の動作が発生する可能性があります。

以上が## C で std::forward を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート