はくさいのメモ帳

調べたことのメモをするだけです

つまるところ右辺値参照とはなんなのか?

正解というわけじゃなくて私なりの理解です。

右辺値つまり一時オブジェクトとして破壊していいもののみを受け取る参照。

左辺値参照だって中身の破壊はconstでさえなければ元々できますが、moveしていいか?みたいな用途において破壊可能かどうか?はconstと同義ではないため、文法要素として導入された、というのが生まれた理由のようです。つまり右辺値参照という何か特別なものを作ったわけではなく、例えて言えばゴミの分別収集よろしく「やっぱりプラスチックゴミとペットボトルは分けるべきだよね」のように「やっぱり左辺値と右辺値の受け取りは区別できるべきだよね」という話になったというわけです。

一時オブジェクトとして破壊していいもののみ区別できるようになると、その一時オブジェクトの中に含まれる永続オブジェクトを使いまわすことができるようになります。つまり移動ですね。左辺値参照でconstでない場合も、破壊することは可能ですがそれが適切な動作かどうかはそのコードを書いた人しか判断できません。これが文法的に判断可能になったことが大きいというわけです。一時オブジェクトなのにいつまでも安全に見続けられるとかそういうことができるようになったわけではありません。CもC++も危険なコードを意図的に書くことが可能な言語なので、文法的に見えたり変更できたりするわけですが、他の諸々の文法要素と同様に安全というわけではないというわけです。

まあ仕様もまったく読んでないし100%推測なわけですがw