当前位置:嗨网首页>书籍在线阅读

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程序库集成。

通常,如果你不需要依赖静态的单例属性及其预定义的内存位置,而只需要其具体值,那么应该更倾向于使用常量。它们允许编译器进行更好的优化,并且更易于使用。