'값에 의한 전달' 이란 무엇을 뜻하는 것일까?
함수에 전달되는 인자를 복사하여 전달되는 방식

'상수객체 참조자에 의한 전달'이란 무엇을 뜻하는 것일까?
포인터나 레퍼런스 즉 * 나 & 로 전달하는 방식을 뜻한다. 상수 이므로 const type * 나 const type& 을 뜻한다.

둘의 차이점이 있다면 무엇일까?
복사 할때 들어가는 비용에 차이가 있다. 값에 의한 전달은 전달되는 인자의 크기가 크면 클 수록 복사 되는 비용이 점점 많이 지불해야 할것이다. 하지만 상수객체 참조자는 주소값인 4Byte(64bit 환경에선 8Byte)의 비용만 지불하면 되기 때문에 그 비용은 일정하다.

또한 참조에 의한 전달 방식은 슬라이싱 문제(복사 손실 : Slicing problem)가 없어진다.

그렇다면 무엇이 더 좋은가?
상수 객체 참조자에 의한 전달 방식이 무조건 좋다는것이 아니다. 전달 인자가 기본자료형, STL 반복자, 함수 객체 타입 일때는 오히려 상수 객체 참조자가 더 위험하거나, 쓸수 없을 때도 있다.

대부분의 경우 위의 3가지 경우가 아니라면, 상수 객체 참조자에 의한 전달 방식을 쓰는게 대개 낫다.



이것만은 잊지 말자!
1. 대개 상수 객체 참조자에 의한 전달이 될수 있다면 쓰자!
2. 기본제공 타입, STL 반복자, 함수 객체 타입은 값에 의한 전달을 쓰자!


관령 링크
http://redinlife.egloos.com/1624588
http://kslive.tistory.com/11
http://skql.tistory.com/515
http://www.web-reader.co.kr/C/c%2B%2B-edu18.htm
http://www.xevious7.com/278
http://occamsrazr.net/tt/166
http://ikpil.tistory.com/313
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요