Skip to content

常量与静态变量

注:常量与静态变量在定义时需要明确指定类型,并且遵循 SCREAMING_SNAKE_CASE 命名规范 (即全大写 + 下划线的形式)。

常量

Rust 语言中使用 const 关键字来定义一个常量,例如:

rust
const THRESHOLD: i32 = 10;
const PI:f32 = 3.14;
const STRING: &'static str = "hello,world!";

常量可以在任何位置定义,包括全局作用域,它与程序中的具体内存位置没有关联。无论常量在哪里使用,它们本质上都是内联的,这意味着当它们被使用时,都是直接被拷贝到相关的上下文中来使用的。对相同常量的引用不保证它们引用的是相同的内存地址。

此外,不能出现同名常量,常量不能被屏蔽/遮挡,也不能被重复定义

静态变量

Rust 使用关键字 static 声明一个全局的变量,例如:

rust
static LEVELS: u32 = 0;

全局变量和常量类似,但是一个重要的区别就是,全局变量不会被内联,在整个程序中,全局变量只有一个实例,也就是说所有的引用都会指向一个相同的地址。

和常量不同,静态变量可以定义为可变的:

rust
static mut LEVELS: u32 = 0;

由于 Rust 的目标是尽可能的避免出现并发 bug,因此,读取或写入可变静态项变量时需要引入 unsafe 语句块