可能的例子:

#[inline(release)]
fn foo() {
    println!("moo");
}

如果没有,是否可以仅包含基于构建类型或其他属性的属性?

最佳答案



是的。这就是 cfg_attr 的用途:

#[cfg_attr(not(debug_assertions), inline(always))]
#[cfg_attr(debug_assertions, inline(never))]
fn foo() {
    println!("moo")
}

这可能是您离目标最近的一次。请注意,编译器可以忽略内联注释(即使使用“always”和“never”)。这样做有充分的理由,您可以在下面阅读。

然而 :你想实现什么?

人类不擅长内联决策,而编译器非常聪明。即使没有 #[inline] ,编译器也会在 Release模式下内联函数,只要这样做是个好主意。它不会在 Debug模式下内联。

如果您没有很好的特殊理由自行修改内联,则不应触摸它!编译器几乎在所有情况下都会做正确的事情:)

甚至 the reference 说:

关于attributes - 是否可以将函数设置为仅在发布版本期间内联?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41515342/

10-11 23:15
查看更多