Rust part10at TECHRust part10 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト276:デフォルトの名無しさん 21/04/24 12:17:31.75 HBFF7y2e.net Rustしかまじめに勉強したことないけどいい言語だと思うよ 277:デフォルトの名無しさん 21/04/24 12:21:15.48 8fCyRscb.net >>272 C/C++で一度ひどい目にあわないとRustの良さは分からんよ 今はまだ分かった気になってるだけ 278:デフォルトの名無しさん 21/04/24 12:39:27.31 aNHhbYgZ.net Rustはコンパイルでひどい目にあうから問題無い 同じことだ 279:デフォルトの名無しさん 21/04/24 12:56:02.52 1Wwd5OE1.net Rustのコンパイラに怒られまくる奴は三流プログラマ 280:デフォルトの名無しさん 21/04/24 12:59:06.14 hc4SaSPr.net Rustの文字列変数って、 str1 = str2; のように書いた時、copyではなくmoveでしたっけ? 281:デフォルトの名無しさん 21/04/24 13:03:33.00 kYV5ExS+.net String型ならmove、&str型ならcopy 文字列リテラルなら後者 282:デフォルトの名無しさん 21/04/24 13:09:43.73 hc4SaSPr.net >>276 調べてみたら、やっぱり、 let s1 = String::from("hello"); let s2 = s1; とすると、以後、s1は使用できなくなり、使用しようとするとコンパイルエラー になるんだね。こうなるのは珍しいと言えば珍しい言語。 1. Javaだと、参照を入れるだけで同じ実体を指しているため、s2経由で変更してもs1が 指しているものも変更される。 2. JS の 文字列は primitive 型なので「コピー動作」となり、s2とs1は別の実体を 指すことになり、一方を変更しても他方には変更の影響は及ばない。 3. MFCのCStringも意味的にはコピー動作なのでJSと似ているが、高速化のため、 代入後に一度も書き換えなければ、文字列を入れているメモリブロックは複製 されないし、コピーもされない。 4. STL(C++) の std::striingもMFCと意味的には似た動作。 5. BASIC言語でも、文字列はコピー動作。 6. Rubyの場合、Javaと同じで同じ実体を参照しているだけなので、一方を書き換えると 他方も全く同じように書き換わる。コピーするためには、s2 = s1.dup; と書く。 つまり、 a. BASIC、JS、MFC、STL(C++)は似た動作。 b. JavaとRubyも似た動作。 c. Rustは、b の系統に似ているが、s1 が使えなくなるのでちょっと違う。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch