blob: 275b2f57d27a29d4931a9b5f0f66c537b99a5ad5 [file] [log] [blame] [view]
# Literals
Numeric literals can be type annotated by adding the type as a suffix. As an example,
to specify that the literal `42` should have the type `i32`, write `42i32`.
The type of unsuffixed numeric literals will depend on how they are used. If no
constraint exists, the compiler will use `i32` for integers, and `f64` for
floating-point numbers.
```rust,editable
fn main() {
// Suffixed literals, their types are known at initialization
let x = 1u8;
let y = 2u32;
let z = 3f32;
// Unsuffixed literals, their types depend on how they are used
let i = 1;
let f = 1.0;
// `size_of_val` returns the size of a variable in bytes
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));
}
```
There are some concepts used in the previous code that haven't been explained
yet, here's a brief explanation for the impatient readers:
* `std::mem::size_of_val` is a function, but called with its *full path*. Code
can be split in logical units called *modules*. In this case, the
`size_of_val` function is defined in the `mem` module, and the `mem` module
is defined in the `std` *crate*. For more details, see
[modules][mod] and [crates][crate].
[mod]: ../mod.md
[crate]: ../crates.md