请参阅此代码:
fn main() {
let something_const = 42;
fn multiply(nbr: i32) -> i32 {
nbr * something_const
}
println!("{}", multiply(1));
}
rustc
输出
error[E0434]: can't capture dynamic environment in a fn item; use the || { ... } closure form instead
--> main.rs:19:15
|
19 | nbr * something_const
| ^^^^^^^^^^^^^^^
但是something_const
不是动态的,因为它在编译时是已知的。
它是否与Rust的C ++ constexpr
机制相同?
答案 0 :(得分:12)
constexpr
可用于两种不同的情况:
Rust支持两者,尽管是有限的方式:
const
声明一个常量而不是let
来声明它是真正的常量const
来限定一个函数,声明它可以在编译时进行评估在您的情况下,您需要第一次使用:
fn main() {
const something_const: i32 = 42;
fn multiply(nbr: i32) -> i32 {
nbr * something_const
}
println!("{}", multiply(1));
}
请注意,与let
不同,必须使用其类型注释常量。
此外,编译器会抱怨命名;常量使用ALL_CAPS
。