相关疑难解决方法(0)

为什么 Rust 只允许数组大小使用独立常量?

我想使用一个函数,将两个数组与声明连接起来,如下所示:

fn concatenate<const COUNT1: usize, const COUNT2: usize>(a: [i32;COUNT1], b: [i32;COUNT2]) -> [i32;{COUNT1+COUNT2}];
Run Code Online (Sandbox Code Playgroud)

问题是返回类型。这是具体的错误:

error: generic parameters may not be used in const operations
 --> src\main.rs:4:101
  |
4 | fn concatenate<const COUNT1: usize, const COUNT2: usize>(a: [i32;COUNT1], b: [i32;COUNT2]) -> [i32;{COUNT1+COUNT2}] {
  |                                                                                                     ^^^^^^ cannot perform const operation using `COUNT1`
  |
  = help: const parameters may only be used as standalone arguments, i.e. `COUNT1`
Run Code Online (Sandbox Code Playgroud)

这个函数似乎很容易单态化,我不明白为什么编译器不允许它。rust book 只声明(两次)这是不允许的,但没有解释原因:

const 参数可以在任何可以使用 const 项的地方使用,但在类型或数组重复表达式中使用时,它必须是独立的(如下所述)。

作为进一步的限制,const 参数只能作为类型或数组重复表达式内的独立参数出现。

有谁知道这种模式与 Rust 模型有何不同,因为至少从我的角度来看,它绝对不是实现限制。如果有帮助的话,这是整个函数:

error: generic parameters may …
Run Code Online (Sandbox Code Playgroud)

generics rust monomorphism-restriction

5
推荐指数
2
解决办法
1164
查看次数

标签 统计

generics ×1

monomorphism-restriction ×1

rust ×1