[過去ログ] 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
13: デフォルトの名無しさん [sage] 2017/07/21(金) 02:26:47.25 ID:9vgFXXAq(1/3) AAS
>右辺値と右辺値参照の違いを
>>9のURL先の説明を書いた低能に100回読ませたい
まずこの違いを明確に理解しないと>>77(3): デフォルトの名無しさん [] 2017/07/21(金) 00:25:40.36 ID:cbDQlmdo(1/6) AAS
・見分け方
lvalueは、名前がある
rvalueは、名前がない
・rvalueの特徴
名前がないということは使い捨ての一時的なオブジェクトだから、処理が終わったら捨てられる
・使い分けの理由
代入演算子(=)や、関数の戻り値に使う時や、vectorなどのコンテナに放り込む時には、
一旦オブジェクトがコピーされるが、rvalueだと分かっていたら、勝手にmoveしてくれるので処理が速い
特に、でかいデータを持った独自のクラスの場合にコピーよりmoveが速くなる
この機能を使いたかったら、クラスのmoveコンストラクタとmove代入演算子(=)を定義しておくこと
でも、それは面倒だろうから、ある条件を満たしたらコンパイラが勝手に作ってくれる
・条件
独自クラスに次のいずれの定義もしていないこと
a) コピーコンストラクタ
b) コピー代入演算子
c) デストラクタ
C++歴1ヶ月の俺が答えてみるテスト
の様なおかしな説明になってしまう
17: デフォルトの名無しさん [sage] 2017/07/21(金) 07:39:48.91 ID:9vgFXXAq(2/3) AAS
そうだな
「lvalueは、名前がある」という誤った知識を注入されていることもあるが
右辺値(rvalue)についての説明が始まって最後まで右辺値参照の話が無いのは良くないな
20: デフォルトの名無しさん [sage] 2017/07/21(金) 08:31:50.37 ID:9vgFXXAq(3/3) AAS
>>1515(1): デフォルトの名無しさん [] 2017/07/21(金) 02:47:35.89 ID:cbDQlmdo(4/6) AAS
俺の理解では、moveしたいからそのためにmoveができる条件を定義してるだけだと思うけど
コンパイラーがどういう条件の時に右辺値と扱えるかどうかを示すために
それが、参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
>参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
&は昔からあるのに、そうなのだろうか。
どちらかというと右辺値・左辺値が右辺値参照・左辺値参照と直交する概念で、
言葉が似ているのに>>1010(1): デフォルトの名無しさん [sage] 2017/07/21(金) 01:02:33.71 ID:joLx1qFD(2/5) AAS
>>8
いや多分そういうことじゃなくて、分からないのはC++の文法的なトリックの部分に関してだと思う
右辺値参照として宣言した変数を参照したら左辺値になるとか
なかなかにクラクラする部分もあるので
の例にもあるように「右辺値参照かつ左辺値が同時に成り立つ」ことが原因だと思うのだが
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.170s