C++ において、静的メンバ関数でないメンバ関数の宣言に付加し、そのメンバ関数が lvalue に対して呼び出されているか、rvalue に対して呼び出されているかに応じた呼び分けを行うための機能です。
参照修飾子は & と && の2種類があり、静的メンバ関数でないメンバ関数の宣言の末尾に付与することで指定します。参照修飾子は関数のシグネチャの一部とみなされ、異なる参照修飾子を付加されたメンバ関数をオーバーロードできます。
class C {
public:
void func() &;
void func() &&;
};ただし、参照修飾子がある/ないでオーバーロードすることはできません。
& が付加されたメンバ関数は、呼び出すオブジェクトが lvalue の場合に優先的に使用されます。同様に、&& が付加されたメンバ関数は、呼び出すオブジェクトが rvalue の場合に優先的に使用されます。
C c;
c.func(); // lvalue に対する func() が呼び出される
C().func(); // rvalue に対する func() が呼び出されるそれぞれの場合で、暗黙のオブジェクト仮引数の型が異なり、& を付加したメンバ関数では lvalueリファレンスとなり、&& を付加したメンバ関数では rvalueリファレンスとなります。
詳細な解説は、新C++編「オブジェクトのムーブ」のページを参照してください。
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Facebook でシェア | X で ポスト/フォロー |
| LINE で送る | noteで書く |
|
| 管理者情報 | プライバシーポリシー |