リテラル
数値型リテラルはサフィックスにより型を指定することが可能です。例えば、42
というリテラルに対してi32
型を指定するには42i32
とします。
サフィックスを指定しない数値型リテラルの場合、その型はどのように使用されるかに依存して決められます。デフォルトでは整数型の場合i32
が、浮動小数点型はf64
を使用します。
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 // `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
は関数ですが、 絶対パス(full path
) で呼び出されています。ソースコードは論理的に区切られた モジュール と呼ばれるものにわけられることができます。今回の場合はsize_of_val
関数はmem
モジュール内で定義されており、mem
モジュールはstd
クレート 内で定義されています。より詳しくはクレート(crates
)を参照してください。