ホームページ > バックエンド開発 > C++ > C メンバー関数宣言における単一アンパサンドと二重アンパサンドの違いは何ですか?

C メンバー関数宣言における単一アンパサンドと二重アンパサンドの違いは何ですか?

Patricia Arquette
リリース: 2024-12-06 13:34:13
オリジナル
441 人が閲覧しました

What's the Difference Between Single and Double Ampersands in C   Member Function Declarations?

メンバー関数宣言におけるアンパサンドの詳細な解釈

C では、非静的メンバー関数を ref 修飾子で装飾できます。これらの修飾子は、関数に渡される暗黙的なオブジェクト パラメーターの参照カテゴリを指定します。

2 つの一般的な参照修飾子を見てみましょう:

  1. 単一のアンパサンド (&) : 関数が左辺値参照を使用して呼び出せることを示します。 object.
  2. ダブル アンパサンド (&&): オブジェクトへの右辺値参照を使用して関数を呼び出すことができることを示します。

ref 修飾子を指定せずにの場合、関数はオブジェクトの値カテゴリに関係なく呼び出すことができます。

違い:

struct Foo {
    void bar() {}  // Default: can be invoked with both lvalues and rvalues
    void bar1() & {}  // Can only be invoked with lvalues
    void bar2() && {}  // Can only be invoked with rvalues
};
ログイン後にコピー

上の例:

  • bar() は、左辺値 (オブジェクト) と右辺値 (一時オブジェクト) の両方で呼び出すことができます。
  • bar1() は、左辺値への参照が必要なため、左辺値に対してのみ呼び出すことができます。 object.
  • bar2() は、オブジェクトへの右辺値参照が必要なため、右辺値に対してのみ呼び出すことができます。

ライブ デモンストレーションは次のとおりです:

int main() {
    Foo f;
    f.bar();
    f.bar1();
    Foo().bar2();  // Error: bar2 requires an rvalue
}
ログイン後にコピー

これらの参照修飾子を理解すると、呼び出されるオブジェクトの参照カテゴリに基づいてメンバー関数へのアクセスを制御できるようになります。

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

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