所有権まわりの話
文字列に関する型
Section titled “文字列に関する型”- 意味:1文字(Unicodeスカラー値)
- サイズ:常に4バイト(UTF-32的な表現)
- 性質:プリミティブ型であり
Copy。 - 用途:1文字だけを使いたいとき
let c: char = 'あ';println!("{}", c)- 意味:UTF-8 バイト列としてエンコードされた文字列全体
- サイズ:コンパイル時にはわからない可変長
- 性質:自身は
Sizedではないので、必ず参照型(&str)として扱う - 用途:複数の文字をまとめて扱いたいとき
let s: &str = "こんにちは";let s = String::from(s);
for b in s.chars() { println!("{} {:x?}", b, b.to_string().as_bytes());}文字列を例にして変数の代入時に生じていることを理解する。
let s1 = String::from("hello");let s2 = s1;変数s1は、文字列リテラルhelloから作られるString型の変数である。
s1をs2に代入すると、String型のデータがコピーされる。
所有権と関数
Section titled “所有権と関数”fn main() { let s = String::from("hello"); // sがスコープに入る
takes_ownership(s); println!("{}", s); // コンパイルエラー
let x = 5; // i32
makes_copy(x); println!("{}", x) // i32はCopy Traitなのでmoveされない}
fn takes_ownership(some_string: String) { println!("{}", some_string);}
fn makes_copy(some_integer: i32) { println!("{}", some_integer);}