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(使用前将#替换为@)