ホームページ >バックエンド開発 >C++ >右辺値参照によって返すことは、左辺値参照によって返すよりも常に効率的ですか?

右辺値参照によって返すことは、左辺値参照によって返すよりも常に効率的ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-24 00:15:10138ブラウズ

Is Returning by Rvalue Reference Always More Efficient Than Returning by Lvalue Reference?

右辺値参照によって返す: より効率的ですか?

右辺値参照によってオブジェクトを返すことは、左辺値によって返すよりも常に効率的であるとは限りません参照。返されたオブジェクトが関数が戻った後に破棄される一時的なオブジェクトである場合、ダングリング参照が発生する可能性があります。

元のコード:

提供されたコード スニペットは返そうとします。一時的な Beta_ab オブジェクトへの移動された右辺値参照:

Beta_ab&& Beta::toAB() const {
    return move(Beta_ab(1, 1));
}

これはダングリングを返すため推奨されません 参照。一時値を戻り値に適切に移動するには、関数は右辺値参照ではなく値を返す必要があります:

Beta_ab Beta::toAB() const {
    return Beta_ab(1, 1);
}

他の関数での右辺値参照の使用:

右辺値参照を返すことは、特定の状況では有益な場合があります。たとえば、一時オブジェクトに対して頻繁に呼び出される getAB() 関数がある場合は、右辺値参照を返す方が効率的です。

struct Beta {
  Beta_ab ab;
  Beta_ab const& getAB() const& { return ab; }
  Beta_ab &&getAB() && { return move(ab); }
};

この例では、ab が存在しないため、move が必要です。ローカルの自動または一時的な右辺値。 ref 修飾子 && により、2 番目の getAB() 関数が一時的な右辺値で呼び出され、コピーではなく移動が行われるようになります。

結論:

戻り中右辺値による参照は場合によっては効率的ですが、ぶら下がり参照を避けるために慎重に使用する必要があります。一般に、一時オブジェクトを返す関数では、値を返すことが推奨されます。

以上が右辺値参照によって返すことは、左辺値参照によって返すよりも常に効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。