Изменчивость
Переменная const
в Rust неизменна.Вы не можете ни переназначить, ни изменить его:
struct Foo(u32);
const FOO: Foo = Foo(5);
fn main() {
FOO = Foo(1); //illegal
FOO.0 = 2; //illegal
}
A static
переменная может быть изменяемой и, следовательно, может быть изменена или переназначена.Обратите внимание, что запись / изменение глобальной переменной static
небезопасно и, следовательно, требует блока unsafe
:
struct Foo(u32);
static FOO: Foo = Foo(5);
static mut FOO_MUT: Foo = Foo(3);
fn main() {
unsafe {
FOO = Foo(1); //illegal
FOO.0 = 2; //illegal
FOO_MUT = Foo(1);
FOO_MUT.0 = 2;
}
}
Вхождения
При компиляции двоичного файла все const
"вхождения"(где вы используете const
в вашем исходном коде) будет заменено на это значение напрямую.
static
s будет иметь выделенный раздел в вашем двоичном файле, куда они будут помещены (раздел BSS , см. Где хранятся статические переменные в C и C ++? для получения дополнительной информации).
В общем, придерживайтесь const
, когда это возможно.Когда это невозможно, потому что вам нужно позже инициализировать переменную в программе с не const
методами, используйте lazy_static!
.