let arr0 = [0u8; 15];
let arr1 = [0u8; arr0.len()]; // this fails
Run Code Online (Sandbox Code Playgroud)
我认为编译器应该能够将arr0的长度确定为编译时常量,不是吗?仍然将此标记为错误,表示找到变量而不是常量整数.
版:
rustc 1.0.0-nightly (ecf8c64e1 2015-03-21) (built 2015-03-22)
Run Code Online (Sandbox Code Playgroud) 我想计算一个的阶乘const。我想结束这样的事情:
const N: usize = 4;
const N_PERMUTATIONS = factorial(N);
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案(不起作用)是:
const fn–不允许(或至少不实施)条件语句const fn,以下任何一种都不会编译:
const fn factorial(n: usize) -> usize {
match n {
0 => 1,
_ => n * factorial(n-1)
}
}
Run Code Online (Sandbox Code Playgroud)
const fn factorial(n: usize) -> usize {
if n == 0 {
1
} else {
n * factorial(n-1)
}
}
Run Code Online (Sandbox Code Playgroud)宏–在所有宏扩展之后执行表达式的评估。此宏将永远不会达到基本情况,因为经过四次迭代后,参数为4-1-1-1-1,与以下参数不匹配0:
macro_rules!factorial {
(0) => (1);
($n:expr) => ($n * factorial($n-1));
}
Run Code Online (Sandbox Code Playgroud)我还尝试了以下方法,如果*进行了短路评估,该方法将起作用,但是按原样进行无条件递归会导致堆栈溢出:
const …Run Code Online (Sandbox Code Playgroud) 这段代码有什么问题?
use std::sync::atomic::AtomicUsize;
static mut counter: AtomicUsize = AtomicUsize::new(0);
fn main() {}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
error: const fns are an unstable feature
--> src/main.rs:3:35
|>
3 |> static mut counter: AtomicUsize = AtomicUsize::new(0);
|> ^^^^^^^^^^^^^^^^^^^
help: in Nightly builds, add `#![feature(const_fn)]` to the crate attributes to enable
Run Code Online (Sandbox Code Playgroud)
文档提到其他原子int大小不稳定,但AtomicUsize显然是稳定的.
这样做的目的是获得一个原子每进程计数器.