const 키워드로 상수를 쓸 수 있고, let으로 변수를 바인딩할 때 mut 키워드를 붙이지 않으면 기본적으로 Immutable 변수가 됩니다.

기본적으로 const 키워드의 값은 constant expression으로 컴파일타임에 결정되어야 합니다. immutable 변수는 런타임에 결정되는 값도 사용할 수 있습니다.

 

아래는 const 상수와 immutable 변수의 차이점입니다. (참고 링크)

 

let a = 1;
let a = a*a;	// OK

const b: u32 = 3;
const b: u32 = b*b;	// error[E0428]

- 상수는 variable shadowing이 불가능함

 

let version = "0.1.1";	// error
const VERSION: &'static str = "0.1.1";	// OK

fn main() {
	...
}

- 상수는 global scope에도 사용할 수 있음

 

let inch = 2.54;	// OK (inch: f64)

// const PI = 3.14;	// error
const PI: f64 = 3.14;	// OK

- 상수는 타입을 명시해줘야함

 

fn plus_one(x: i32) -> i32 {
	x+1
}

const fn plus_one_const(x: i32) -> i32 {
	x+1
}

fn main() {
	const N1: i32 = plus_one(3);	// error[E0015]
	const N2: i32 = plus_one_const(3);	// OK
}

- 상수는 constant expression으로만 초기화시킬 수 있음 (함수 반환값 or 런타임에 결정되는 값 사용불가)

 

Rust의 const는 여러모로 C++의 constexpr과 비슷한 듯 합니다.

반응형

'프로그래밍 > Rust' 카테고리의 다른 글

[Rust] rustup, cargo shell completion 추가하기  (0) 2024.04.06
[Rust] 물음표(?) 연산자와 unwrap  (0) 2024.03.03
Rust 예제: Guessing Game  (0) 2020.06.30