このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 メンバ関数のCV修飾は、*thisがconst/volatileである場合とそうでない場合でメンバ関数をオーバーロードできる。 同じように、メンバ関数に対して&もしくは&&の参照修飾子を付加することで、*thisが左辺値である場合に呼び出されるメンバ関数のオーバーロード、*thisが右辺値である場合に呼び出されるメンバ関数のオーバーロードを定義できる。 これを使用することで、「一時オブジェクトな*thisに対して特定のメンバ関数を呼び出せてはならない制約」、「*thisが左辺値もしくは右辺値である場合の効率的な実装を使い分ける」といった設計ができるようになる。 struct X { // 代入演算子は、*thisが左辺値である場合のみ呼び出