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

2023-11-22

This:

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 函数需要能够在编译期间运行,因此它们不能调用只能在运行时评估的非常量函数。自从u32::pow不是 const 函数,您不能从 const 函数调用它。

现在的问题是:为什么不u32::pow常量函数?其原因是 const 函数当前的限制:它们只能包含该语言的一个子集。值得注意的是,它们不能包含循环或赋值。自从u32::pow使用这两个,它不能被标记为const因此不能从 const 函数调用。

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

Update:常量函数gained他们可以在 Rust 1.46 中使用更多语言功能(包括if, while, &&等),以及整数类型'pow函数被做了const in 铁锈1.50.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Rust 中的 const 函数不能调用关联函数? 的相关文章

随机推荐