[過去ログ] 次世代言語14 Elixir Crystal Julia Rust Swift (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
115
(1): デフォルトの名無しさん [sage] 2018/09/16(日) 17:04:17.35 ID:eufVg8gX(1/4) AAS
>>113
113(2): デフォルトの名無しさん [sage] 2018/09/16(日) 09:42:39.79 ID:AUVu3qQo(1/5) AAS
Rustのmoveは確かにイマイチ

ローカル変数は = でmove出来るが
構造体フィールドは = では不可なためmem::replaceを使う
ライフタイムの違いによるものとはいえ記述の一貫性に欠ける

この点はC++のstd::moveの方が一貫性がある
>>114
114(1): デフォルトの名無しさん [sage] 2018/09/16(日) 10:35:29.39 ID:AUVu3qQo(2/5) AAS
具体例が無いのも何なので一応

RustとC++コード例 >>113での要点はfooの中身
外部リンク:ideone.com
外部リンク:ideone.com
構造体のフィールドはmove出来ちゃまずいから
この場合はむしろC++のコンパイルが通ってることが問題だよ

記述の一貫性のためだけに未定義動作の危険性を許しちゃダメでしょ
118
(1): デフォルトの名無しさん [sage] 2018/09/16(日) 20:39:05.75 ID:eufVg8gX(2/4) AAS
>>116
116(1): デフォルトの名無しさん [sage] 2018/09/16(日) 18:21:37.55 ID:RkzcyYVh(2/3) AAS
Rustの構造体 T のフィールドはmoveできる
&mut T は全体のmoveもフィールドのmoveもできないがreplaceならできる
すまん 言葉足らずだった
Rustに関してはその通りだよ
でもC++はRustみたいに強力なボローチェッカーがないからmoveはまずい

>>117
117(1): デフォルトの名無しさん [sage] 2018/09/16(日) 18:24:03.24 ID:AUVu3qQo(3/5) AAS
>>115
このコードに問題も未定義動作も無いぞ
unique_ptrのムーブコンストラクタにより適切に所有権が移動される
そのコードは確かに未定義動作は起こさない
でも未定義動作を起こす危険性を含む
C++の方のfooメソッドの最後の一行をコメントアウトしても
コンパイルが通ってしまうって言えば何が危険か分かるよね
それを防ぐためにはC++の方もreplaceでなきゃダメ
123
(1): デフォルトの名無しさん [sage] 2018/09/16(日) 22:31:43.85 ID:eufVg8gX(3/4) AAS
>>121
121(1): デフォルトの名無しさん [sage] 2018/09/16(日) 21:32:49.26 ID:AUVu3qQo(5/5) AAS
もしかしてmoveされた側が不定値にでもなると勘違いしてるのかね
すまん。俺の間違いだった。
move後はnullptrになる事が保証されてることを今知った
今までずっと未定義だと思ってた
(てか会社の先輩にそう教わったんだ あの野郎デタラメ教えやがって)
俺の勘違いでした m(__)m
125: デフォルトの名無しさん [sage] 2018/09/16(日) 22:43:00.14 ID:eufVg8gX(4/4) AAS
てか軽くググってみても「move後は未定義」って書いてあるサイトが
チラホラ存在するんだが…めっちゃ紛らわしい

>>124
124(1): デフォルトの名無しさん [sage] 2018/09/16(日) 22:36:54.71 ID:8SACu1kv(1) AAS
>>123
マニュアルくらい読めよ
外部リンク:doc.rust-jp.rs
Rustの公式マニュアルは読んどるわ
問題はC++の方だよ
公式のマニュアルは無いわ
ネットの情報は(偽情報含めて)多すぎるわで
まんまと踊らされたわ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.042s