- C++11から、呼出元の参照修飾に応じて、メンバー関数のオーバーロード解決を行わせる機能が使えるようになった
- 関数宣言で、constの後、かつ、noexceptの前に記述する
void foo(...) const && noexcept {...}
&はlvalue referenceに、&&はrvalue referenceに対応する
- 関数宣言で、constの後、かつ、noexceptの前に記述する
- しかし、これがあっても、クラス内部ではlvalue版が常に呼び出される
- thisポインタの解釈に変更はなく、常にlvalueであるため
- なので、rvalue版を呼び出すには、
*thisをムーブするなどの必要がある
- C++23から、”Deducing this”と呼ばれる機能が使えるので、これらを簡単に解決できるようになる
- cvやrefを指定して
*thisを引数として受け取ることができる- 例えば、
void foo(this const Foo&& self, ...)はvoid foo(...) const&&と同じ
- 例えば、
- forwarding referenceでも受け取れるので、1つの定義のみですべてのパターンを網羅できる
void foo(this auto&& self, ...)- cvとrefを転送する
forward_like<T>関数も用意される
- cvやrefを指定して
- 参考:https://en.cppreference.com/w/cpp/language/member_functions
C++:Ref-Qualifiersとthisポインタ
·
Updated:
Share this post on: