ホームページ >バックエンド開発 >C++ >C メンバー関数: パラメーター リストの `&` と `&&` は何を意味しますか?

C メンバー関数: パラメーター リストの `&` と `&&` は何を意味しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-12 17:15:12579ブラウズ

C   Member Functions: What Do `&` and `&&` Mean in Parameter Lists?

メンバー関数のパラメーター リスト: & シンボルの公開

C でメンバー関数を宣言する場合、パラメーター リストの後に & および && シンボルが使用される場合があります。 ref 修飾子として知られるこれらの記号は、暗黙的なオブジェクト パラメーターの参照型を示します。

単一のアンパサンド (&)

単一のアンパサンド (&) は、メンバー関数が呼び出されることを示します。オブジェクトが左辺値参照の場合。左辺値参照は、特定のメモリ位置に格納されている既存のオブジェクトを参照します。次のコード スニペットは、その使用法を示しています。

class wrap {
public:
   operator obj() const & { ... }
   operator obj() && { ... }
private:
   obj data_;
};

オブジェクトが左辺値参照の場合、& ref 修飾子を持つ演算子 obj() 関数が呼び出されます。これは、左辺値式と右辺値式の両方を使用して呼び出すことができることを意味します。

アンパサンドなし

ref 修飾子がない場合、暗黙的なオブジェクト パラメーターは左辺値参照として扱われます。これにより、左辺値式と右辺値式の両方を使用してメンバー関数を呼び出すことができます。以下のコードは、この動作を示しています。

struct foo
{
    void bar() {}
};

int main()
{
    foo().bar(); // (always fine)
    foo f;
    f.bar();      // (always fine)
}

右辺値参照 (&&)

&& ref 修飾子は、オブジェクトが右辺値参照の場合にメンバー関数が呼び出されることを示します。右辺値参照は、特定のメモリ位置にバインドできない一時オブジェクトまたは式で評価されるオブジェクトを指します。

主な違い

次の表は、単一のアンパサンド (&) と、単一のアンパサンド (&) の違いをまとめたものです。アンパサンドなし:

Ref-Qualifier Reference Type Can be Invoked With
& lvalue reference lvalue and rvalue expressions
None lvalue reference lvalue and rvalue expressions

これらの参照修飾子を理解することは、メンバー関数を正しく実装し、それに基づいてその動作を調整するために重要です。コンテキスト。

以上がC メンバー関数: パラメーター リストの `&` と `&&` は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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