5.1 Literals

숫자 리터럴은 타입을 접미어로 추가해서 타입을 주해할 수 있다. 예를 들어, 특정한 리터럴 42i32 타입이니, 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 는 함수지만, 호출될 때 full path로 되었다. 코드는 modules로 불리는 논리 유잇 단위로 나눌 수 있다. 이번 예제에선, size_of_val함수는 mem 모듈에 정의되어 있고, mem 모듈은 std crate에 정의되어 있다. 더 자세히 알고 싶으면 참고 : modulescrates.

results matching ""

    No results matching ""