Skip to content

常量与静态变量

常量

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语句块