Литералы

Числовые литералы могут быть обозначены добавлением типа в качестве суффикса. Например, чтобы указать, что литерал 42 должен иметь тип i32, необходимо написать 42i32.

Без суффикса тип литерала будет зависеть от того, как он используется. Если нет никаких ограничений, то компилятор будет использовать i32 для целочисленных литералов, а f64 — для литералов с плавающей точкой.

fn main() {
    // Литералы с суффиксами. Их тип известен при инициализации.
    let x = 1u8;
    let y = 2u32;
    let z = 3f32;

    // Литералы без суффиксов. Их тип будет зависеть от того, как их используют.
    let i = 1;
    let f = 1.0;

    // `size_of_val` возвращает размер переменной в байтах
    println!("size of `x` in bytes: {}", std::mem::size_of_val(&x));
    println!("size of `y` in bytes: {}", std::mem::size_of_val(&y));
    println!("size of `z` in bytes: {}", std::mem::size_of_val(&z));
    println!("size of `i` in bytes: {}", std::mem::size_of_val(&i));
    println!("size of `f` in bytes: {}", std::mem::size_of_val(&f));
}

В предыдущем коде используются некоторые понятия, которых мы ранее не касались. Вот краткое пояснение для нетерпеливых читателей:

  • std::mem::size_of_val является функцией, но вызывается с указанием полного пути. Код можно разделить на логические единицы, называемые модулями. В данном случае функция определена в модуле mem, а модуль mem определён в контейнере std. Подробнее см. модули и контейнеры, а также соответствующую главу в книге