指定されたコード スニペット:
class wrap { operator obj() const & { ... } //Copy from me. operator obj() && { ... } //Move from me. };
では、異なる参照を持つ 2 つのメンバー関数宣言が見つかります。 -修飾子 (& および &&)。しかし、単一のアンパサンド (&) は何を意味するのでしょうか?
非静的メンバー関数宣言内の単一のアンパサンドは、オブジェクトが左辺値参照の場合にメンバー関数が呼び出されることを示します。デフォルトでは、非静的メンバー関数は左辺値オブジェクトと右辺値オブジェクトの両方で呼び出すことができます。ただし、& を指定すると、関数は左辺値のみを受け入れることができます。
違いを説明すると、
struct foo { void bar() {} void bar1() & {} void 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 サイトの他の関連記事を参照してください。