rust const fn 到底是什么意思

Wil*_*een 11 constants rust

Rust 常量 fn

在下面的文章中,我看到了以下内容:

const fn 允许您在“const 上下文”中执行代码。例如:

const fn five() -> i32 {
    5
}

const FIVE: i32 = five();
Run Code Online (Sandbox Code Playgroud)

const fn 在 Rust 中到底做了什么?难道只是说函数可以在编译时完全计算出来(我的猜测是基于阅读文章)

Pat*_*ick 1

要理解 const fn,首先需要理解 const 表达式。

某些表达式(称为常量表达式)可以在编译时求值。在const上下文中,这些是唯一允许的表达式,并且始终在编译时求值。在其他地方,例如let语句,常量表达式可能(但不保证)在编译时计算。

明显的问题是,保证在编译时计算哪些表达式。他们是:

  • 数组类型长度1,数组重复长度 2
  • 常量初始化3、静态4、枚举判别式5
  • 常量泛型参数6
那么现在,什么是 const fn:

Aconst fn是一个允许从const上下文调用的函数。当从上下文调用时,该函数由编译器在编译时const解释。解释发生在编译目标的环境中,而不是主机的环境中。如果您针对 32 位系统进行编译,则 32 位也是如此,无论您是在 64 位还是 32 位系统上进行构建。usize

Const 函数有各种限制,以确保它们可以在编译时求值。例如,不可能将随机数生成器编写为函数constconst在编译时调用函数始终会产生与在运行时调用函数相同的结果,即使多次调用也是如此。

有关更多详细信息,请参阅此处