הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

<p id="Предварительное_объявление"><strong><a l:href="#Предварительное_объявление">Предварительное объявление</a></strong></p>

Можно сначала объявить связь с переменной, а инициализировать её позже. Однако, такая форма используется редко, так как может привести к использованию неинициализированных переменных.

fn main() {

// Объявляем связь с переменной

let a_binding;

{

let x = 2;

// Инициализируем связь

a_binding = x * x;

}

println!("связь а: {}", a_binding);

let another_binding;

// Ошибка! Использование неинициализированной связи с переменной

println!("другая связь: {}", another_binding);

// ИСПРАВЬТЕ ^ Закомментируйте строку

another_binding = 1;

println!("другая связь: {}", another_binding);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Компилятор запрещает использование неинициализированных переменных, так как это привело бы к неопределённому поведению.

<p><strong><a l:href="#Заморозка">Заморозка</a></strong></p><p><strong><a l:href="#Типы">Типы</a></strong></p>

Rust предоставляет несколько механизмов изменения или определения примитивных и пользовательских типов:

   • Приведение между примитивными типами

   • Указание желаемого типа при помощи литералов

   • Использование вывода типов

   • Псевдонимы типов

<p id="Приведение_типов"><strong><a l:href="#Приведение_типов">Приведение типов</a></strong></p>

Rust не предусматривает неявного преобразования типов (принудительное) между примитивными типами. Но, явное преобразование типов (casting) можно выполнить используя ключевое слово as.

Правила, используемые для преобразование внутренних типов, такие же, как в языке C, за исключением тех случаев, когда преобразование типов в языке C вызывает неопределённое поведение. Поведение всех приведений между встроенными типами чётко определено в Rust.

// Убрать все предупреждения

// которые вызываются переполнением при преобразование типов.

#![allow(overflowing_literals)]

fn main() {

let decimal = 65.4321_f32;

// Ошибка! Нет неявного преобразования

let integer: u8 = decimal;

// ИСПРАВЬТЕ ^ Закомментируйте данную строку

// Явное преобразование

let integer = decimal as u8;

let character = integer as char;

// Ошибка! Здесь ограничение в правилах конвертации. Число с плавающей точкой не может быть напрямую конвертирован в символ.

let character = decimal as char;

// ИСПРАВЬТЕ ^ Закомментируйте данную строку

Перейти на страницу:

Похожие книги