面试题答案
一键面试const
关键字
- 可变性:
const
定义的常量总是不可变的。一旦定义,其值不能被修改。这是因为常量通常用于表示程序中不会改变的值,比如数学常数(如const PI: f64 = 3.141592653589793;
)。 - 生命周期:
const
常量没有显式的生命周期,它们的生命周期是整个程序的生命周期。因为它们的值在编译时就确定,并且在程序的整个运行过程中保持不变。
static
关键字
- 可变性:默认情况下,
static
变量是不可变的,但可以通过mut
关键字使其可变。不过,可变的static
变量在多线程环境下使用需要格外小心,因为它们可能导致数据竞争。例如:
static mut COUNTER: i32 = 0;
- 生命周期:
static
变量的生命周期同样是整个程序的生命周期。它们在程序启动时初始化,直到程序结束才销毁。
实际编程场景中的选择
- 使用
const
的场景:- 当需要定义编译时常量,如数学常量、配置参数等不会在运行时改变的值。这些常量在编译时会被内联到使用它们的地方,提高性能。
- 用于泛型编程中作为类型参数的常量值,以实现基于常量的泛型算法。
- 使用
static
的场景:- 当需要在程序的整个生命周期内共享一个值,且这个值可能需要在运行时初始化(例如,从文件或环境变量中读取的值)。
- 对于需要在多个模块间共享的全局状态,但要注意在多线程环境下对可变
static
变量的同步访问。如果不需要可变,优先使用不可变的static
变量以避免数据竞争问题。