Reference

참조자 수명 조건

참조는 반드시 어떤 객체에 묶여야 하고 보통 다시 묶을 수 없다. 포인터보다 안전해 보이지만 dangling reference는 더 은밀하다.

01

필수성을 표현한다

함수에 반드시 객체가 필요하면 T&나 const T&가 T*보다 호출 계약을 잘 드러낸다.

02

변경 여부 선택

읽기만 하면 const T&, 수정해야 하면 T&로 차이를 타입에 남긴다.

03

반환 참조를 검토한다

지역 변수 참조를 반환하면 함수 종료와 함께 참조가 끊어진다.

T&
수정 가능한 별칭 호출한 객체 자체를 바꿀 수 있다.
함수 이름이 변경 의도를 보여야 한다.
const T&
읽기 별칭 복사를 피하면서 수정은 막는다.
큰 객체 인자에 흔히 사용한다.
return T&
수명 노출 멤버나 컨테이너 원소를 노출하면 호출자가 내부 수명에 의존한다.
캡슐화 비용을 본다.
temporary
수명 연장 규칙 const reference가 임시 수명을 연장하는 경우가 있지만 모든 상황에 적용되지 않는다.
저장된 참조는 별도 확인한다.

필수 인자 · 반환 수명 · 내부 노출 점검

필수 인자 null을 허용하지 않는 포인터 인자를 참조로 바꿀 수 있는가.
반환 수명 참조 반환이 지역 변수나 임시 객체를 가리키지 않는가.
내부 노출 멤버 참조를 외부에 넘겨 객체 불변식이 깨지지 않는가.

읽기와 변경

void normalize(Image& image);
void print_summary(const Image& image);