这是否足以防止以调用函数为代价的通用开销?还是需要指定
#[inline(never)]
?
fn foo<T: Add<i32>>(a: i32, b: T) -> i32 {
fn static_ops(a: i32) -> i32 {
a += 99;
if a % 100 == 0 {
println!("Static output{a}");
}
a *= a;
a
}
a = static_ops(a);
b + a
}
这段代码会有同样的要求吗?
fn foo<T: Add<i32>>(a: i32, b: T) -> i32 {
let static_ops = |a: i32| -> i32 {
a += 99;
if a % 100 == 0 {
println!("Static output{a}");
}
a *= a;
a
}
a = static_ops(a);
b + a
}
不仅不能使用
#[inline(never)]
,使用它也是一个错误。您不希望编译器不内联该函数,它会消除优化机会。
但是,请重新考虑分离该功能。它降低了可读性。仅当您的函数被多次使用时才这样做。