面试题答案
一键面试静态变量(static
)
- 声明方式:
static MY_STATIC: i32 = 42;
- 内存存储特点:
- 静态变量具有固定的内存地址,其生命周期贯穿整个程序的运行期间。它存储在静态内存区域,这意味着在程序启动时就为其分配内存,直到程序结束才释放。
- 静态变量是可变的,不过对其进行可变操作时需要使用
mut
关键字声明,并且访问时需要额外的unsafe
块,因为多个线程可能同时访问静态变量,可变操作可能导致数据竞争。例如:
static mut COUNTER: i32 = 0;
fn increment() {
unsafe {
COUNTER += 1;
}
}
常量(const
)
- 声明方式:
const MY_CONST: i32 = 42;
- 内存存储特点:
- 常量没有固定的内存地址。常量的值在编译时就被确定,并且会在使用它的地方进行内联替换,类似于宏展开。
- 常量只能使用不可变的值,不允许声明可变常量。例如:
// 下面这样声明可变常量是错误的
// const mut BAD_CONST: i32 = 0;
主要区别总结:
- 内存地址:静态变量有固定内存地址,常量没有固定内存地址,在编译时进行内联替换。
- 可变性:静态变量可以是可变的(需
mut
和unsafe
),常量只能是不可变的。 - 生命周期:静态变量生命周期贯穿程序始终,常量在编译时确定并替换,不涉及运行时的生命周期概念。