ホームページ >バックエンド開発 >C++ >C メンバー関数宣言における 1 つのアンパサンド (&) は何を意味しますか?

C メンバー関数宣言における 1 つのアンパサンド (&) は何を意味しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 11:55:09691ブラウズ

What Does the Single Ampersand (&) Mean in a C   Member Function Declaration?

メンバー関数宣言の単一アンパサンドについて理解する

指定されたコード スニペット:

class wrap {
   operator obj() const & { ... }   //Copy from me.
   operator obj() && { ... }  //Move from me.
};

では、異なる参照を持つ 2 つのメンバー関数宣言が見つかります。 -修飾子 (& および &&)。しかし、単一のアンパサンド (&) は何を意味するのでしょうか?

非静的メンバー関数宣言内の単一のアンパサンドは、オブジェクトが左辺値参照の場合にメンバー関数が呼び出されることを示します。デフォルトでは、非静的メンバー関数は左辺値オブジェクトと右辺値オブジェクトの両方で呼び出すことができます。ただし、& を指定すると、関数は左辺値のみを受け入れることができます。

違いを説明すると、

struct foo
{
   void bar() {}
   void bar1() & {}
   void bar2() && {}
};
  • bar() は左辺値と右辺値の両方を受け入れます。
  • bar1() には左辺値参照が必要なので、左辺値でのみ呼び出すことができます
  • bar2() には右辺値参照が必要なので、右辺値オブジェクトに対してのみ呼び出すことができます。

例:

int main()
{
   foo().bar();  // (always fine)
   foo().bar1(); // doesn't compile because `bar1()` requires an lvalue
   foo().bar2(); // doesn't compile because `bar2()` requires an rvalue

   foo f;
   f.bar();      // (always fine)
   f.bar1();
   f.bar2();     // doesn't compile because `bar2()` requires an rvalue
}

以上がC メンバー関数宣言における 1 つのアンパサンド (&) は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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