...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

右辺値参照のお勉強(3)

自分のコメントをコピペ.

std::string s = "hello";
std::string&& t = s;
s = "world";
// ここでの s と t は?

こうすると,とりあえず,s と t は "world" になるようだ.

  • 右辺値参照された s を使用するコードは有効なのか,あるいは不正か未定義なのか?
  • もしかしたら右辺値参照の後に s を読んではいけなくて,一度 s に代入したらオブジェクト s は復活するとか?
  • そもそも s は破壊されるわけではないとか?
  • あるいは s が破壊されるとはどういう状態になることなのかが分かっていないのかも.

ううん,分からないことだらけです><;;;

追記

皆さんの親切なコメントのおかげで少しずつ理解できてきました.ありがたや.

  • 右辺値とは無名で暗黙裏に生成破棄されるオブジェクトかリテラルであり,左辺値とは名前が付いているオブジェクトである(正確ではないかもしれないがこんな感じか)
  • 右辺値参照は右辺値を参照することができる(そのまんま)
  • 右辺値参照された右辺値は破壊される
  • 右辺値参照には左辺値を渡すことができて,その左辺値は破壊されない(疑問の答え)

追記

ちょっと待った!

  • 右辺値参照された右辺値は破壊される

じゃなくて

  • 右辺値はどうせすぐ破壊されるので移動される(しても問題ない)

だな.