此:
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);
答案 0 :(得分:6)
const函数不能调用非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)
。