[過去ログ] 次世代言語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
>>113113(2): デフォルトの名無しさん [sage] 2018/09/16(日) 09:42:39.79 ID:AUVu3qQo(1/5) AAS
Rustのmoveは確かにイマイチ
ローカル変数は = でmove出来るが
構造体フィールドは = では不可なためmem::replaceを使う
ライフタイムの違いによるものとはいえ記述の一貫性に欠ける
この点はC++のstd::moveの方が一貫性がある
>>114構造体のフィールドはmove出来ちゃまずいから
この場合はむしろC++のコンパイルが通ってることが問題だよ
記述の一貫性のためだけに未定義動作の危険性を許しちゃダメでしょ
118(1): デフォルトの名無しさん [sage] 2018/09/16(日) 20:39:05.75 ID:eufVg8gX(2/4) AAS
>>116116(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そのコードは確かに未定義動作は起こさない
でも未定義動作を起こす危険性を含む
C++の方のfooメソッドの最後の一行をコメントアウトしても
コンパイルが通ってしまうって言えば何が危険か分かるよね
それを防ぐためにはC++の方もreplaceでなきゃダメ
123(1): デフォルトの名無しさん [sage] 2018/09/16(日) 22:31:43.85 ID:eufVg8gX(3/4) AAS
>>121すまん。俺の間違いだった。
move後はnullptrになる事が保証されてることを今知った
今までずっと未定義だと思ってた
(てか会社の先輩にそう教わったんだ あの野郎デタラメ教えやがって)
俺の勘違いでした m(__)m
125: デフォルトの名無しさん [sage] 2018/09/16(日) 22:43:00.14 ID:eufVg8gX(4/4) AAS
てか軽くググってみても「move後は未定義」って書いてあるサイトが
チラホラ存在するんだが…めっちゃ紛らわしい
>>124Rustの公式マニュアルは読んどるわ
問題はC++の方だよ
公式のマニュアルは無いわ
ネットの情報は(偽情報含めて)多すぎるわで
まんまと踊らされたわ
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.042s