Числовые литералы могут быть обозначены добавлением типа в качестве суффикса. Например,
чтобы указать, что литерал 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)); }
В предыдущем коде используются некоторые вещи, которые не были объяснены ранее. Вот краткое объяснение для нетерпеливых читателей:
fun(&foo)
используется для передаче аргумента в функцию по ссылке, вместо
передачи по значению (fun(foo)
). Подробнее см. заимствование или соответствующую
главу в книгу.std::mem::size_of_val
является функцией, но вызывается с указанием полного пути.
Код можно разделить на логические единицы, называемые модулями. В данном случае,
функция определена в модуле mem
, а модуль mem
определён в контейнере std
.
Подробнее см. модули и контейнеры,
а так же соответствующую главу в книге