const reference 관련 의문
글쓴이: vani2 / 작성시간: 수, 2013/10/23 - 7:54오후
'const가 붙지 않은 변수에는 const를 대입할 수 없다' 를 기준으로 보았을때
레퍼런스 참조에서
void foo(int& a) {
printf("%d", a);
}
이런식으로 인수에 const를 붙이지 않고서 함수를 만들고
const int a = 12;
foo(a);
하니 오류가 나네요..
그렇다면 클래스의 복사 생성자의 인수를 const를 붙이지 않고 만들경우 위와같은 문제가 생길까요?
이전에 복사 생성자에 const를 붙이는 것은 '선택'이다 라는 말을 들은 것 같은데 이것은 틀린말 아닐까 생각 되네요..
Forums:
함수 인수로 레퍼런스나 포인터를 받을 때 const
함수 인수로 레퍼런스나 포인터를 받을 때 const 키워드를 안 쓴다는 것은, 파라메터로 받은 인스턴스가 함수 내부에서 변경될 수 있음을 의미합니다. (꼭 그렇게 동작해야 한다가 아니라, 함수의 소스코드 내용을 모르는 상태에서 그 함수를 사용해야 되는 프로그래머의 입장에서 생각해보세요.)
여기에 const 변수를 넘겨주면 에러가 나며, 복사 생성자도 예외는 아닙니다.
복사 생성자가 파라메터 인스턴스를 변경할 이유가 없다면 const로 쓰고, 아니라면 const 없이 쓰면 됩니다.
그렇군요. 그러면 포인터나 레퍼런스 같은 유도형을
그렇군요.
그러면 포인터나 레퍼런스 같은 유도형을 제외한 일반 타입들은 const를 붙이지 않는것이 좋을까요?
아니면 const는 되도록 붙이는게 좋나요?
호출하는 쪽 입장에서 보면 어차피 복사본이 사용될
호출하는 쪽 입장에서 보면 어차피 복사본이 사용될 거라 const 여부는 상관없고, 호출받는 쪽 입장에서도 값이 변경되는 게 별다른 부작용이 없다면 const 붙일 필요는 없습니다.
관례적으로는 const를 안 쓰는 경우가 대부분이더군요.
아 그렇군요 세세한 답변 감사합니다. 도움이
아 그렇군요 세세한 답변 감사합니다. 도움이 되었습니다.
auto_ptr 처럼
복사 생성자의 인자의 멤버를 변경하는 경우도 있겠죠.
----------------------
navs:KIM Hyuntak
----------------------
댓글 달기