RP
Size: a a a
RP
EG
NL
RP
r
panic=abort
или сказать: «в C++ это даёт UB в таком-то случае, если для вас это допустимо, то есть функция unreachable_unchecked!()
, которая в явном виде сделает то же самое»unsafe { }
, теоретически, действительно даёт возможность сделать только ограниченное количество вещей, но на практике ты можешь в ансейфе легко сломать любой инвариант, фактически «отключив» проверку. Вот, например, мгновенный UB — два мутабельных референса на одну точку:let mut a = 0;
let b = &mut a as *mut i32;
let c = &mut a;
unsafe {
let d: &mut i32 = std::mem::transmute(c);
}
EG
push rax
, в С++ не появляется. Этот тезис не опровергнут никак.RP
RP
EG
RP
EG
EG
r
RP
panic=abort
или сказать: «в C++ это даёт UB в таком-то случае, если для вас это допустимо, то есть функция unreachable_unchecked!()
, которая в явном виде сделает то же самое»unsafe { }
, теоретически, действительно даёт возможность сделать только ограниченное количество вещей, но на практике ты можешь в ансейфе легко сломать любой инвариант, фактически «отключив» проверку. Вот, например, мгновенный UB — два мутабельных референса на одну точку:let mut a = 0;
let b = &mut a as *mut i32;
let c = &mut a;
unsafe {
let d: &mut i32 = std::mem::transmute(c);
}
DF
RP
p
RP
p