- 554 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 00:30:08.36 ID:4MgUQE5v.net]
- >>534
Rustはもっと単純 生ポインタを使えばC言語と全く同じ状態となる fn main() { let mut a: i32 = 123; let raw_pointer = &mut a as *mut i32; // aの生ポインタを得る (unsafe不要) let b = &a; // bがaの参照を借用 // a = 456; // これは借用ルールによりコンパイルエラーとなり書き換えできない unsafe { *raw_pointer = 456; } // 生ポインタを使えば自由自在に書き換え可能 assert_eq!(a, 456); // 借用ルールを逸脱して書き換わっている assert_eq!(*b, 456); // 借用している参照bから見ても当然書き換わっている } じゃあUnsafeCellなどはいつ使うの?と思うだろうけど それはRustで安全な型を提供するための部品として用いる 例えばRefCellやOnceCellなどの安全な型は部品としてUnsafeCellを用いている
|

|