Rust · Deref coercion

역참조 강제 변환은 참조의 방향을 안전하게 좁힌다

컴파일러는 함수와 메서드 호출에서 필요한 참조 타입을 찾을 때 DerefDerefMut 구현을 따라갑니다.

immutable

&T에서 &U

T: Deref<Target = U>

읽기 참조는 안쪽 읽기 참조로 자동 변환될 수 있습니다.

mutable

&mut T에서 &mut U

T: DerefMut<Target = U>

유일한 가변 대여가 유지될 때 안쪽 가변 참조로 이어집니다.

one way

&mut T에서 &U

T: Deref<Target = U>

가변 대여를 읽기 전용으로 쓰는 것은 대여 규칙을 깨지 않습니다.

1

호출식 작성

사용자는 hello(&m)처럼 자연스러운 참조를 넘깁니다.

2

시그니처 비교

함수가 기대하는 타입과 실제 인자 타입이 같은지 확인합니다.

3

deref 탐색

필요한 만큼 deref를 적용하되 횟수는 컴파일 타임에 정합니다.

4

호출 확정

맞는 참조 타입을 얻으면 런타임 비용 없이 그 호출로 컴파일됩니다.

Deref

스마트 포인터를 읽기 참조처럼 다룹니다.

DerefMut

가변 참조의 역참조 동작을 확장합니다.

금지 방향

불변 참조를 가변 참조로 바꾸는 변환은 없습니다.