1. ホーム
  2. c++

C++におけるメンバ関数のconst&, &, &&指定子

2023-11-27 03:39:15

質問

最近、私は の API を読んでいました。 boost::optional という行に行き当たりました。

T const& operator *() const& ;
T&       operator *() & ;
T&&      operator *() && ;

また、メンバ関数を const&, &, && (戻り値の型ではなく、セミコロンの直前の指定子について述べていることに注意してください) として定義する独自のプログラムを書きましたが、これらは問題なく動作するようです。

メンバ関数をconstと宣言する意味はわかるのですが、const&、&、&&と宣言する意味を説明できる方いらっしゃいますか?

どのように解決するのですか?

const& は、このオーバーロードが const、non-const、lvalue オブジェクトにのみ使用されることを意味します。

const A a = A();
*a;

& は、このオーバーロードがconstでないオブジェクトにのみ使用されることを意味します。

A a;
*a;

&& は、このオーバーロードがrvalueオブジェクトにのみ使用されることを意味します。

*A();

C++11 標準のこの機能に関する詳細については、次の投稿を参照してください。 this" の rvalue 参照とは何ですか?