Item20_'값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다
챕터 핵심 내용
- '값에 의한 전달'보다는 '상수 객체 참조자에 의한 전달'을 택하자. 대체적으로 효율적일 뿐만 아니라 복사 손실 문제까지 막아준다.
- 이번 항목에서 다룬 법칙은 기본제공 타입 및 STL 반복자, 그리고 함수 객체 타입에는 맞지 않다. 이들에 대해서는 '값에 의한 전달'이 더 적절하다.
- '값에 의한 전달'보다는 '상수 객체 참조자에 의한 전달'을 택하자. 대체적으로 효율적일 뿐만 아니라 복사 손실 문제까지 막아준다.
- 참조에 의한 전달 방식으로 매개변수를 넘기면 복사손실 문제(slicing problem)가 없어진다.
- 복사손실 문제 : 파생 클래스 객체가 기본 클래스 객체로서 전달될 때, 값으로 전달되면 파생 클래스의 부분이 잘리게(slice) 된다.
- 이번 항목에서 다룬 법칙은 기본제공 타입 및 STL 반복자, 그리고 함수 객체 타입에는 맞지 않다. 이들에 대해서는 '값에 의한 전달'이 더 적절하다.
- 전달되는 객체의 타입이 기본제공 타입일 경우에는 참조자로 넘기는 것보다 값으로 넘기는 편이 더 효율적일 때가 많다.
- 반복자와 함수 객체를 구현할 때는 (1)복사 효율을 높이고, (2)복사손실 문제에 노출되지 않도록 만들어야 한다.
- 그러나, 타입 크기만 작다고 무조건 값에 의한 전달이 능사인 것은 아니다. 복사 비용도 작아야 한다.
- 또한, 수행 성능 문제가 발목을 잡을 수있다. 컴파일러 중에는 기본제공 타입과 사용자 정의 타입을 다르게 취급하는 경우가 있다. 기본제공 타입은 레지스터에 들어가나, 사용자 정의 타입은 그렇지 않다. 이럴 경우에는 차라리 참조에 의한 전달을 쓰는 편이 좋다. 포인터는 확실히 레지스터에 들어가기 때문이다.
- 그리고 사용자 정의 타입은 크기가 언제든지 커질 수 있다.