[過去ログ] Rust part21 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
44
(2): デフォルトの名無しさん [sage] 2023/08/29(火) 09:40:59.22 ID:ud/hz0aH(2/4) AAS
あー
let v = hoge.into_bytes(); // これか
46
(1): デフォルトの名無しさん [] 2023/08/29(火) 10:08:22.27 ID:ud/hz0aH(4/4) AAS
>>43
43(2): デフォルトの名無しさん [sage] 2023/08/29(火) 09:29:50.39 ID:ud/hz0aH(1/4) AAS
let hoge = "hoge".to_string();
let v = hoge.as_bytes().to_vec(); // ← ここでデータのコピーは発生しますか?
>>45
45(1): デフォルトの名無しさん [] 2023/08/29(火) 10:07:33.54 ID:ud/hz0aH(3/4) AAS
let v = hoge.as_bytes().into(); // これも等価なんか?
が等価で
>>44 だけ違うんか?
47: デフォルトの名無しさん [sage] 2023/08/29(火) 10:28:52.72 ID:hbocgPIY(1) AAS
>>43
コピーを発生せずに別の型へ変換するには「消費してxxxへ変換」(into_xxx)するしかないため元が所有権を持たなければならない
つまり単なるスライス参照&[T]をto_vec()するのはコピーが発生する
一方で所有権を持つスライスBox<[T]>ならばinto_vec()でコピーを発生させずにVecにできる
このto_xxxとinto_xxxに注意

>>44
互いに消費してコピーを発生せずに行き来できる
let vec = string.into_bytes();
let string = String::from_utf8(vec).unwrap();
前者は特にVec<u8>になるためinto_vecではなくinto_bytesと名付けられている
後者はutf8保証チェックが入るためResultが返る
その保証を人が与えるならチェックを省略できる
let string = unsafe { String::from_utf8_unchecked(vec) };
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.041s