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

时间:2017-07-22 00:36:53

标签: static rust

此:

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);

1 个答案:

答案 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)