gpt4 book ai didi

static - 为什么 Rust 中的 const 函数不能调用关联函数?

转载 作者:行者123 更新时间:2023-11-29 08:10:34 27 4
gpt4 key购买 nike

这个:

const fn pow2(exp: u32) -> u32 {
u32::pow(exp, 2)
}

导致编译器错误:

error[E0015]: calls in constant functions are limited to constant functions, struct and enum constructors

有办法吗?

我想做的事:

pub const MY_BITMASK: u32 = pow2(4);

最佳答案

const 函数不能调用非常量函数。这是因为 const 函数需要能够在编译期间运行,因此它们不能调用只能在运行时计算的非 const 函数。由于 u32::pow 不是 const 函数,因此您不能从 const 函数调用它。

现在的问题变成了:为什么 u32::pow 不是一个 const 函数?原因是 const 函数的当前限制:它们只能包含语言的一个子集。值得注意的是,它们不能包含循环或赋值。自 u32::pow uses both of these ,它不能被标记为 const,因此不能从 const 函数中调用。

请注意,从 const 函数调用关联函数没有任何限制,只要关联函数被标记为 const。并且 u32::pow 在任何情况下都不是关联函数:您可以调用它,例如x.pow(y).

更新: Const 函数 gained他们可以在 Rust 1.46 中使用更多的语言特性(包括 ifwhile&& 等),以及整数类型的 pow 函数在 Rust 1.50 中变为 const .

关于static - 为什么 Rust 中的 const 函数不能调用关联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45249486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com