'값에 의한 전달' 이란 무엇을 뜻하는 것일까?
함수에 전달되는 인자를 복사하여 전달되는 방식
'상수객체 참조자에 의한 전달'이란 무엇을 뜻하는 것일까?
포인터나 레퍼런스 즉 * 나 & 로 전달하는 방식을 뜻한다. 상수 이므로 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
함수에 전달되는 인자를 복사하여 전달되는 방식
'상수객체 참조자에 의한 전달'이란 무엇을 뜻하는 것일까?
포인터나 레퍼런스 즉 * 나 & 로 전달하는 방식을 뜻한다. 상수 이므로 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
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 25: 예외를 던지지 않는 swap에 대한 지원도 생각해 보자 (0) | 2008.06.24 |
---|---|
항목 24: 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멘버 함수를 선언하자 (0) | 2008.06.15 |
항목 23: 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자. (0) | 2008.06.07 |
항목 22: 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 (0) | 2008.06.07 |
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. (0) | 2008.06.07 |
항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자. (0) | 2008.06.05 |
항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. (0) | 2008.06.04 |
항목 17: new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2008.06.03 |
항목 16: new 및 delete를 사용할 때는 형태를 반드시 맞추자 (0) | 2008.06.03 |
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2008.06.02 |
최근댓글