- 142 名前:デフォルトの名無しさん mailto:sage [2024/02/27(火) 18:13:56.86 ID:7nYMkiDR.net]
- >>133
まず基本を理解しよう deref coreceは必ず参照から参照へのみ起きる Box自体は当然deref coreceされない その例だと let b = Box::new("Hello".to_string()); まずc0は単なるBox参照 let c0: &Box<String> = &b; このc1とc2がderef corece let c1: &String = &b; let c2: &str = &b; そのc1とc2を明示的に書くとこうなる let c1: &String = &**(&b); let c2: &str = &**(&**(&b)); この暗黙に適用される&**がderef corece この自動適用のおかげでstrのメソッドが使える assert!(b.starts_with("He")); フルに書くとこうでもちろん対象はbではなく&b assert!(str::starts_with(&b, "He")); この&bが前述の通り自動的に&**(&**(&b))となり&str型へcoreceされている
|
|