EG
Size: a a a
EG
EG
EG
&
, 'a
, <>
и ::<>
.NL
EG
p
RP
VS
RP
NL
VS
EG
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);
}
RP
RP
RP
EG
fn foo(max: i32,
num: i32) -> i32 {
return max * num
}
pub fn bar(max: i32,
num: i32) -> i32 {
return foo(max, num) *
foo(max, num)
}
extern "C" { fn foo(); }
pub fn bar(max: i32,
num: i32) -> i32 {
let z = max * num;
unsafe { foo(); }
return z
}
RP
RP