Keyword const[−][src]

Expand description

编译时常量和编译时可评估函数。

编译时常量

有时,某个值在整个程序中会多次使用,并且一遍又一遍地复制它会变得很不方便。 而且,使其成为每个需要它的函数的变量并非总是可能或不希望的。 在这些情况下,const 关键字为代码复制提供了一种方便的替代方法:

const THING: u32 = 0xABAD1DEA;

let foo = 123 + THING;
Run

常量必须显式地输入。与 let 不同,您不能忽略它们的类型并让编译器确定它的类型。 可以在 const 中定义任何常量值,而实际上 const 恰好是大多数在常量中合理的东西 (除非使用 const fn`s)。

例如,您不能将 File 作为 const。

常量中唯一允许的生命周期是 'static,它是 Rust 程序中包含所有其他生命周期的生命周期。 例如,如果您想定义一个常量字符串,它将看起来像这样:

const WORDS: &'static str = "hello rust!";
Run

多亏了静态生命周期省略,您通常不必显式使用 'static:

const WORDS: &str = "hello convenience!";
Run

const 该项看起来与 static 项非常相似,后者在何时应使用哪个引起了一些混淆。 简而言之,常量在任何使用它们的地方都被内联,使用它们与简单地用它的值替换 const 的名称是相同的。 另一方面,静态变量指向内存中所有访问共享的单个位置。 这意味着,与常量不同,它们不能具有析构函数,并且在整个代码库中都可以充当单个值。

常量 (如静态变量) 应始终位于 SCREAMING_SNAKE_CASE 中。

有关 const 的更多详细信息,请参见 Rust Book 或 Reference。

编译时可评估函数

const 关键字的另一个主要用途是在 const fn 中。 这将一个函数标记为可以在 const 或 static 项的主体中以及在数组初始化程序 (通常称为 “const contexts”) 中被调用。 const fn 限制它们可以执行的一组操作,以确保可以在编译时对其进行评估。 有关更多详细信息,请参见 Reference。

将 fn 转换为 const fn 对该函数的运行时使用没有影响。

const 的其他用途

const 关键字也与 mut 一起用于裸指针中,如 *const T 和 * mut T 所示。 可以在 指针原语 的 Rust 文档中阅读有关裸指针中使用的 const 的更多信息。