エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
探検
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
2017/07/18(火) 15:31:46.97ID:PYVrHLeZ
ほす
2017/07/18(火) 18:40:03.50ID:R/mOsefM
まさか短時間に20レスしないと落ちる?
2017/07/18(火) 19:38:57.23ID:u0V8o5mb
そんなことで落ちるならレス数一桁のスレが大量に残ってるわけないだろ
5デフォルトの名無しさん
2017/07/20(木) 23:03:44.79ID:kpkY/QGw 右辺値参照がネットのどの記事をみてもわからないので書籍に手を出して見ようと思います
右辺値参照についてをわかりやすく取り扱ってる参考書籍があれば教えてください
右辺値参照についてをわかりやすく取り扱ってる参考書籍があれば教えてください
2017/07/20(木) 23:51:51.38ID:z9hoJ4wh
ネットで探して出てくるいつもの説明が一番マシではないかという気がしてならない
7デフォルトの名無しさん
2017/07/21(金) 00:25:40.36ID:cbDQlmdo ・見分け方
lvalueは、名前がある
rvalueは、名前がない
・rvalueの特徴
名前がないということは使い捨ての一時的なオブジェクトだから、処理が終わったら捨てられる
・使い分けの理由
代入演算子(=)や、関数の戻り値に使う時や、vectorなどのコンテナに放り込む時には、
一旦オブジェクトがコピーされるが、rvalueだと分かっていたら、勝手にmoveしてくれるので処理が速い
特に、でかいデータを持った独自のクラスの場合にコピーよりmoveが速くなる
この機能を使いたかったら、クラスのmoveコンストラクタとmove代入演算子(=)を定義しておくこと
でも、それは面倒だろうから、ある条件を満たしたらコンパイラが勝手に作ってくれる
・条件
独自クラスに次のいずれの定義もしていないこと
a) コピーコンストラクタ
b) コピー代入演算子
c) デストラクタ
C++歴1ヶ月の俺が答えてみるテスト
lvalueは、名前がある
rvalueは、名前がない
・rvalueの特徴
名前がないということは使い捨ての一時的なオブジェクトだから、処理が終わったら捨てられる
・使い分けの理由
代入演算子(=)や、関数の戻り値に使う時や、vectorなどのコンテナに放り込む時には、
一旦オブジェクトがコピーされるが、rvalueだと分かっていたら、勝手にmoveしてくれるので処理が速い
特に、でかいデータを持った独自のクラスの場合にコピーよりmoveが速くなる
この機能を使いたかったら、クラスのmoveコンストラクタとmove代入演算子(=)を定義しておくこと
でも、それは面倒だろうから、ある条件を満たしたらコンパイラが勝手に作ってくれる
・条件
独自クラスに次のいずれの定義もしていないこと
a) コピーコンストラクタ
b) コピー代入演算子
c) デストラクタ
C++歴1ヶ月の俺が答えてみるテスト
8デフォルトの名無しさん
2017/07/21(金) 00:50:30.03ID:cbDQlmdo moveコンストラクタを作ったら気づくと思うが、処理内容は結局コピーコンストラクタと同じなわけ
とどのつまり、ポインタをメンバーに持ったクラスを定義する時に有効なんだよ
コピーコンストラクタ(lvalue)だと、コピー元は存在し続ける可能性があるから、
必ず1から全データを作り直して、ポインターのポイント先を新データにしないといけない
でも、rvalueで捨ててもいいデータだと分かっていたら、捨てるデータを捨てずにそのまま使って
ポインタのポイント先をその捨てるデータにすればよいから、楽で速いよねという話
とどのつまり、ポインタをメンバーに持ったクラスを定義する時に有効なんだよ
コピーコンストラクタ(lvalue)だと、コピー元は存在し続ける可能性があるから、
必ず1から全データを作り直して、ポインターのポイント先を新データにしないといけない
でも、rvalueで捨ててもいいデータだと分かっていたら、捨てるデータを捨てずにそのまま使って
ポインタのポイント先をその捨てるデータにすればよいから、楽で速いよねという話
2017/07/21(金) 00:56:26.30ID:joLx1qFD
右辺値参照なら
https://srad.jp/~taro-nishino/journal/507551/
が一番わかりやすい
これ読んでわからなかったらまだ手を出すのが早すぎたと思って諦めたほうが良い
本を買っても無駄な出費になるだろう
そして↑のページを見つけるのに検索してて出てきたのが↓
https://woorex.com/06_yahari/1994_01.html
で、全然読んでないが、こういった文章に価値はないと思う
ネットの文章のすべてに価値があるわけではないと思ったわ
https://srad.jp/~taro-nishino/journal/507551/
が一番わかりやすい
これ読んでわからなかったらまだ手を出すのが早すぎたと思って諦めたほうが良い
本を買っても無駄な出費になるだろう
そして↑のページを見つけるのに検索してて出てきたのが↓
https://woorex.com/06_yahari/1994_01.html
で、全然読んでないが、こういった文章に価値はないと思う
ネットの文章のすべてに価値があるわけではないと思ったわ
2017/07/21(金) 01:02:33.71ID:joLx1qFD
11デフォルトの名無しさん
2017/07/21(金) 01:04:55.21ID:kH4Xa8wr12デフォルトの名無しさん
2017/07/21(金) 01:15:36.94ID:uK7tgvol まぁ、あれだよね。
右辺値と右辺値参照の違いを理解できるとスッキリするんだけどね。
右辺値と右辺値参照の違いを理解できるとスッキリするんだけどね。
2017/07/21(金) 02:26:47.25ID:9vgFXXAq
14デフォルトの名無しさん
2017/07/21(金) 02:39:34.56ID:cbDQlmdo 使う目的が違うの?
15デフォルトの名無しさん
2017/07/21(金) 02:47:35.89ID:cbDQlmdo 俺の理解では、moveしたいからそのためにmoveができる条件を定義してるだけだと思うけど
コンパイラーがどういう条件の時に右辺値と扱えるかどうかを示すために
それが、参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
コンパイラーがどういう条件の時に右辺値と扱えるかどうかを示すために
それが、参照に&マークを使っているという歴史的経緯でややこしくなってるだけでしょ
2017/07/21(金) 02:51:29.22ID:joLx1qFD
まずもって
> lvalueは、名前がある
> rvalueは、名前がない
がおかしいということでは?
> lvalueは、名前がある
> rvalueは、名前がない
がおかしいということでは?
2017/07/21(金) 07:39:48.91ID:9vgFXXAq
そうだな
「lvalueは、名前がある」という誤った知識を注入されていることもあるが
右辺値(rvalue)についての説明が始まって最後まで右辺値参照の話が無いのは良くないな
「lvalueは、名前がある」という誤った知識を注入されていることもあるが
右辺値(rvalue)についての説明が始まって最後まで右辺値参照の話が無いのは良くないな
18デフォルトの名無しさん
2017/07/21(金) 07:46:07.93ID:cbDQlmdo レベルの低いスレだな
19デフォルトの名無しさん
2017/07/21(金) 07:53:53.57ID:cbDQlmdo お勧め本の提示ができないばかりか、自分の言葉で説明もできずにただただ罵るだけ
突っ込まれると粗探しをし始める
まぁ、本当に理解してる人間がこんなスレ覗く暇ないわな
突っ込まれると粗探しをし始める
まぁ、本当に理解してる人間がこんなスレ覗く暇ないわな
2017/07/21(金) 08:31:50.37ID:9vgFXXAq
2017/07/21(金) 08:43:30.27ID:xjFWQMIy
2017/07/21(金) 09:09:12.41ID:F3uzVYNc
他の言語ではこの概念出てこないの?どこが違うの?
2017/07/21(金) 10:43:02.49ID:YiUdVm2o
他言語では見たことが無いな
参照の仕組みが近いのはC#だと思うが右辺値参照の概念は無い
static int X;
static ref int M() { return ref X; }
static void Main () {
M() = 100;//「M()」実質の左辺値
ref int x = ref M();//「ref M()」実質の左辺値
ref int rx = ref x;
rx++;
Console.Write(M());//「M()」実質の右辺値
}
参照の仕組みが近いのはC#だと思うが右辺値参照の概念は無い
static int X;
static ref int M() { return ref X; }
static void Main () {
M() = 100;//「M()」実質の左辺値
ref int x = ref M();//「ref M()」実質の左辺値
ref int rx = ref x;
rx++;
Console.Write(M());//「M()」実質の右辺値
}
2017/07/21(金) 11:42:16.76ID:joLx1qFD
他言語では代入演算子でオブジェクトをコピーしたり
まるでオブジェクトを基本型であるかのようにふるまわせる概念が無いからな
なぜなら他言語にはGCが有るからね
GCがあって、オブジェクトは常にnewして使うから
勝手にディープコピーされるとか、そういうことは考える必要がないね
逆にC++はGCが無いから・・・
もしC#で右辺値参照があり得るとしたらstructに関してだが
C#のstructはmoveセマンティクスが必要であるような用途に使うものではないから
やっぱり要らないな
まるでオブジェクトを基本型であるかのようにふるまわせる概念が無いからな
なぜなら他言語にはGCが有るからね
GCがあって、オブジェクトは常にnewして使うから
勝手にディープコピーされるとか、そういうことは考える必要がないね
逆にC++はGCが無いから・・・
もしC#で右辺値参照があり得るとしたらstructに関してだが
C#のstructはmoveセマンティクスが必要であるような用途に使うものではないから
やっぱり要らないな
2017/07/21(金) 11:52:40.57ID:XYgV/slE
GCがあるから委譲と複製を区別しなくて済むってのに違和感
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【東京】西東京市の住宅で親子4人死亡 母親名義のマンションで知人男性も死亡 いきさつや関連を捜査 警視庁 ★2 [ぐれ★]
- 日テレの男性記者と女性記者がカラオケBOXで行為に及び、NHK記者が動画撮影 動画が拡散するも女性記者は「泥酔していて記憶がない」★3 [Ailuropoda melanoleuca★]
- 【労働力不足】43万人、外国人「育成就労」で補完 27年度から新制度 特定技能制度と合わせて123万人まで受け入れ [ぐれ★]
- 日テレの男性記者と女性記者が二次会のカラオケBOXでわいせつ行為 NHK記者が撮影、動画拡散 女性記者「泥酔していて記憶がない」★2 [Hitzeschleier★]
- ジャパネットたかた、売上高が過去最高に…2950億円の見込み [煮卵★]
- 高市内閣の若い世代の支持率は92.4% FNN世論調査★7 [♪♪♪★]
- 【逆予言】アイツ「全電源喪失はあり得ない」「インフレ、円の価値暴落になってない」あとは? [219241683]
- 高市総理「責任ある積極財政とは、国債発行や減税を行うということではない」 [256556981]
- 【高市悲報】小野田大臣(偏差値35)「アニメはテストの点数を上げる🤩るろ剣で日本史爆上がりした」 [359965264]
- 子供3人道連れに無理心中した母親が借りてたマンションの部屋で惨殺された若い男の遺体を発見 [342741319]
- 【日帝しぐさ】教育委員会「起立斉唱」_国連「日の丸・君が代の強制は自由権規約18条(思想、良心及び宗教の自由)に違反している」 [979264442]
- 粘粘粘🏡
