やっぱり中途半端に理解した知識を話してはいけない

と、僕なんかよりC++0xの規格に詳しい友人と話して思いました。

ようは、 rvalue で const Hoge&& ってなんであるのよ。って話なのですが。

const Hoge&& は const Hoge& に暗黙的に変換されるらしい(?)。N1377にも書いてあった気がする。

恐らく、解釈的には const Hoge&& は rvalue としての認識を持たせるためのものなのではないかと思った。

rvalue として利用できるものを const にする。という感じなのだろうか。

なんだか分かりづらいし、使う理由がなさそうなのでこの場合は const Hoge& で良いと思う。

どなたか、 const Hoge&& の分かりやすい話とかあったらお願いしたいです。

move semantics も何となく誤解してたらしい。

unique_ptr の実装であるような所有権の移動を行なう為の概念で、 実際はムーブコンストラクタではメンバに rvalue として渡される。

ムーブコンストラクタで渡された引数 rvalue は、デストラクタ及びリソース破棄関数(オブジェクト)が呼び出されても何も起こらないように値を書き換える。

…という感じらしいけど、あってるだろうか。

rvalue はこの所有権の移動をより分かりやすく行なえる為のキーワードのようなものっぽい。

これまでは auto_ptr であるようなコピーコンストラクタで Hoge& を受け取って上記のような操作を行なうようになっていたが、

rvalue を定義することで所有権の移動とコピーの処理を分割させてしまう感じだろうか。

どうも rvalue と move semantics は分かりづらい。良い解説求む。