lvalueとrvalueとmoveと
@yumetodo @kazatsuyu ああっ、以前自分の中で整理した文を見返したら、xvalue間違ってました。一時オブジェクトを拘束した変数=xvalueと書いてた。 う~ん、未だに十分には整理できてないみたい。
2017-06-26 01:14:31@TheorideTech @kazatsuyu だからそもそもprvalueとxvalueをわけるのは無意味だと思うんですよね。
2017-06-26 01:15:49rvalueへの変換?
@yumetodo @kazatsuyu なるほど。 まだ分けてないし、成るべくここは避けて通った方がよさそう。 でも、一時オブジェクトだからmoveできるってところは間違ってない気がします。
2017-06-26 01:16:52@TheorideTech @kazatsuyu 「一時オブジェクトだからmoveできる」ってのもおかしい。さっきの例で変数v1が一時オブジェクトに変化するんじゃなくって、一時オブジェクトだと偽っているだけ。lvaueはrvalueに変換できない。
2017-06-26 01:18:32@TheorideTech @kazatsuyu >一時オブジェクトだと偽っている これもちがうか、rvalueの別名ですよーとアピールしている
2017-06-26 01:19:17@yumetodo @kazatsuyu いや、普通にできるでしょ。 a=b+1;はb:lvalueをrvalueに変換してます。
2017-06-26 01:20:38@kazatsuyu @yumetodo bが一旦rvalueへ変換されてから、計算されると聞いた記憶が有ります。 名前も付いていたような。思い出せない。年を感じます。
2017-06-26 01:22:39@kazatsuyu @TheorideTech あれ、 cpplover.blogspot.jp/2009/11/rvalue… の >lvalueはrvalueに変換できるが、その逆、rvalueをlvalueに変換することは出来ない。 がわからなくなってきた(寝てる
2017-06-26 01:22:43@yumetodo @kazatsuyu 容器から値を取り出せるけど、値を容器にすることはできないと理解してます。
2017-06-26 01:23:33@TheorideTech @yumetodo 詳しい動作の規定は思い出せないけど、それはbがrvalueとして扱われるのではなく、bのコピーが作られているということになるのでは?
2017-06-26 01:24:29@yumetodo @kazatsuyu 内部的には要はアキュムレータへロードしているだけなので、値をコピーしているんですけどね。
2017-06-26 01:26:34@TheorideTech @yumetodo コピー先がlvaueたりうる束縛されたオブジェクトならlvalueだけど、rvalueにコピーされることも普通にあるのでは
2017-06-26 01:28:14@kazatsuyu @yumetodo なるほど。rvalueへ変換するのとrvalueへコピーするのって、結局同じことを言っているのかも知れませんね。
2017-06-26 01:29:36@yumetodo @kazatsuyu 元のlvalueをrvalueにできるできないの話は、lvalueをムーブするために、std::moveでキャストしてます。このキャストの「変換」ですね。 std::moveはlvalueをrvalueへ変換していると思います。◯or☓?
2017-06-26 01:36:59@TheorideTech @kazatsuyu >std::moveはlvalueをrvalueへ変換していると思います。◯or☓? ばつ。rvalue referenceへの変換であってrvalueへの変換ではない
2017-06-26 01:37:54