C++ 에서 const 타입과 not const 타입의 오버로딩 .. ㅜㅜ
글쓴이: naddolki / 작성시간: 일, 2009/08/09 - 8:54오전
C++ 에서 함수 오버로딩할 때 ..
void plusOne(int *);
void plusOne(const int *);
위의 경우 정상적으로 "오버로딩" 이 되는데..
void plusOne(int);
void plusOne(const int);
는 오버로딩이 되질 않을까요 ? (함수 중복 정의 오류가 남)
가령 ..
int plusOne(const int a)
{
return a+1;
}
int plusOne(int a)
{
return ++a;
}
위와 같은 두 경우 모두 사용이 가능해야 하는 게 아닐까요 ?
아시는 분 계시면 .. 좀 알려주셔요 ㅠㅠ
Forums:
호출할 떄 구분할 수
호출할 떄 구분할 수 있는 방법이 없기 때문입니다.
인자를 넘겨줄 때, const int* 는 int*로 캐스팅 없이는 복사될 수 없기 때문에, const int*와 int*는 구분이 가능합니다.
const int *a = ...
int *b = a // error!!!
하지만 int 와 const int는 서로 복사가 가능하므로 함수 호출할 때 어느쪽을 부른 걸지 알수가 없습니다.
const int a = ...
int b = a // no problem
void plusOne(const int
void plusOne(const int var);
일반적으로 위와 같이 함수 파라미터에 const 를 쓴다는 것은 해당 파라미터 값을 함수 내에서 변경 시키지 않겠다는
의미란 것은 잘 알고 계시리라 생각합니다.
void plusOne(const int *var);
하지만 위와 같은 경우의 var 변수는 바뀔 수 있습니다. 다른 주소를 포인팅 할 수 있죠.
다시말해 var 변수 자체가 const가 아니라 const int* 라는 타입을 가지는 변수 입니다.
void plusOne(int *);
void plusOne(const int *);
즉 위와 같은 경우는 파라미터로 넘어오는 변수의 타입이 다르기 때문에 함수를 사용할때 넘겨진 인자를 통해
사용될 함수를 구분하고 결정 할 수 있지만
void plusOne(int *);
void plusOne(int * const );
이런 경우는 구분 하지 못합니다. (위 같은 경우는 같은 타입을 넘겨받지만 아래 것은 값을 변경하지 않겠다는 의미입니다.)
댓글 달기