18-静态值
7.3.2 静态值
静态值是相应的全局值,因为它们具有固定的内存位置,并且在整个程序中作为单个(唯一)实例存在。不过也可以让它们成为可变的。然而,由于全局变量是“最恶劣”的错误的“滋生地”,因此存在一些安全机制。读取和写入静态值都必须在某个unsafe代码块中完成。以下是创建和使用静态值的示例:
// statics.rs
static mut BAZ: u32 = 4;
static FOO: u8 = 9;
fn main() {
unsafe {
println!("baz is {}", BAZ);
BAZ = 42;
println!("baz is now {}", BAZ);
println!("foo is {}", FOO);
}
}
在上述代码中,我们声明了两个静态值BAZ和FOO,使用关键字static创建它们并显式指定其类型。如果希望它们是可变的,那么可以在关键字static之后添加关键字mut。静态值不像常量那样是内联的,当我们读取和写入静态值时,需要用到unsafe代码块。静态值通常与同步原语搭配使用,它们还用于实现全局锁定,以及与C程序库集成。
通常,如果你不需要依赖静态的单例属性及其预定义的内存位置,而只需要其具体值,那么应该更倾向于使用常量。它们允许编译器进行更好的优化,并且更易于使用。