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!";
Runconst
项看起来与 static
项非常相似,这就造成了一些混淆,不知道应该在什么时间使用哪个项。
简而言之,常量在任何使用它们的地方都被内联,使用它们与简单地用它的值替换 const
的名称是相同的。
另一方面,静态变量指向内存中所有访问共享的单个位置。
这意味着,与常量不同,它们不能具有析构函数,并且在整个代码库中都可以充当单个值。
常量 (如静态变量) 应始终位于 SCREAMING_SNAKE_CASE
中。
有关 const
的更多详细信息,请参见 Rust 书 或 Reference。
编译时可评估函数
const
关键字的另一个主要用途是在 const fn
中。
这将一个函数标记为可以在 const
或 static
项的主体中以及在数组初始化程序 (通常称为 “常量上下文”) 中被调用。
const fn
被限制在它们可以执行的操作集合中,以确保它们可以在编译时进行计算。
有关更多详细信息,请参见 Reference。
将 fn
转换为 const fn
对该函数的运行时使用没有影响。
const
的其他用途
const
关键字也与 mut
一起用于裸指针中,如 *const T
和 *mut T
所示。
可以在 指针原语 的 Rust 文档中阅读有关裸指针中使用的 const
的更多信息。