История изменений
Исправление trex6, (текущая версия) :
Не совсем так. Type deduction может использовать не только x = 0
для выведения типа переменной.
После выведения типа переменной, компилятор определяет (declaration) переменную и выделяет память (definition) в точке let x
.
Таким образом она будет существовать до выполнения одной if
для обоих веток. Даже если в одной из веток она не используется.
Вот такой пример должен показать что именно я имею в виду (playground):
fn main() {
let mut x;
if std::env::args().len() == 0 {
x = 0;
println!("X(1):{x}");
} else {
// x = 1;
}
// память под переменную выделенна
// независимо от использованной ветки условного оператора
x = 42_u16;
println!("X(2):{x}")
}
Исходная версия trex6, :
Не совсем так. Type deduction может использовать не только x = 0
для выведения типа переменной.
После выведения типа переменной, компилятор определяет (declaration) переменную и выделяет память (definition) в точке let x
.
Таким образом она будет существовать до выполнения одной if
для обоих веток. Даже если в одной из веток она не используется.
Вот такой пример должен показать что именно я имею в виду playground:
fn main() {
let mut x;
if std::env::args().len() == 0 {
x = 0;
println!("X(1):{x}");
} else {
// x = 1;
}
// память под переменную выделенна
// независимо от использованной ветки условного оператора
x = 42_u16;
println!("X(2):{x}")
}