やっぱり中途半端に理解した知識を話してはいけない
と、僕なんかより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 は分かりづらい。良い解説求む。