#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
T Max(T a,T b)
{
return a > b ? a : b;
}
template <>
char* Max(char* a,char* b)
{
cout<<"cahr* Max<char*>(char* a,char* b)"<<endl;
return strlen(a) > strlen(b) ? a : b;
}
template <>
const char* Max(const char* a,const char* b)
{
cout<<"const char* Max<const char*>(const char* a,const char* b)"<<endl;
return strcmp(a,b) > 0 ? a : b ;
}
int main()
{
cout<<Max(11,15)<<endl;
cout<<Max('T','Q')<<endl;
cout<<Max(3.5,7.9)<<endl;
cout<<Max("Simple","Best")<<endl;
char str1[]="Simple";
char str2[]="Best";
cout<<Max(str1,str2)<<endl;
return 0;
}
템플릿 부분 공부하고있고 지금부터 질문할건
빨간색과 보라색부분인데, 반환형과 매개변수를 보면 const 선언이 되어있어요
근데 내가 배운바에 따르면 저기 포인터에서 const 선언을 할경우에 세가지 경우가 있는데
첫번째는 위 소스처럼
const char* a 일때, 이 경우는 포인터 변수 a를 통해서 a가 가르키는 변수의 값을 변경시키지 않겠다는 뜻이고 이때는 cosnt가 상수화의 개념이 아니라 그냥 값의 변경을
않겠다 라는 뜻.
두번째는 char* const a, 이 경우는 포인터 변수 a가 상수화가 되는거고 여기에 저장된 주소값을 끝까지 가르키겠다는 뜻. 즉 가르키는곳 변경 불가
세번째는 const char* const a 인데 이경우는 걍 전부 변경불가
이정도로 알고 있는데 지금 부분은 첫번째 부분에 해당하겠져
그리고 반환형이 const선언 인경우에는 반환할때 const 화 해서 반환한다라고 배웠습니당 (잘못알고 있다면 지적좀 ㅜㅜ)
그런데 Max 함수를 보면 반환형도 consts이고 매개변수도 const인데 굳이 const 선언을 해주는 이유가 뭔가요?
값의 변경을 허용할만한 소스가 없는데 ㅜㅜ
그래서 내가 매개변수의 const를 지워보니 컴파일 에러가 납니다..분명 문자열 상수를 받는 것은 char *a 이렇게만 해줘도 가능할텐데 이유가 뭐때문이죠?
특히 반환형은 값을 진짜 딱 '반환' 만하기때문에 값이 변할 건덕지가 없는데 반환할때 const화 해주는 이유가 뭔가요?
며칠째 이것때문에 진도도 잘 못나가겠네요 ㅠㅠ프겔형님들 코린이 구제좀..
댓글 0