Литералы
Числовые литералы могут быть обозначены добавлением типа в качестве суффикса. Например, чтобы указать, что литерал 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
. Подробнее см. модули и контейнеры, а также соответствующую главу в книге