-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
[13:37] throw, catch문에서 auto casting이 안되는 예와 관련된 설명 문의
21.03.07 20:24 작성 조회수 113
0
안녕하세요, 항상 질문 답변해주셔서 감사드립니다.
강의 중 auto casting이 안되는 예에 대해서 아래와 같은 코드를 이용해 설명해주셨습니다.
try
{
//if (x < 0.0) throw std::string("Negative input");
if (x < 0.0) throw "Negative input";
cout << std::sqrt(x) << endl;
}
catch (std::string error_message)
{
//do something to respond
cout << error_message << endl;
}
교수님께서는 문자열에 마우스를 올리시면서 "Negative input"에 대해 'const char *'라고 말씀을 하시는데요, 저도 이전 강의들을 통해서 문자열은 'const char *'에 저장된다고 알고 있었습니다.
하지만 정작 마우스를 올려보면 아래와 같이 표현이 됩니다.
(const char[15])"Negative input"
실제로 아래와 같이 코드를 구성해서 테스트를 해보면 에러가 발생하는데요,
try
{
if (x < 0) throw "Negative input";
cout << std::sqrt(x) << endl;
}
catch (const char error[])
{
cout << "const char array" << endl;
cout << error << endl;
}
catch (const char *error)
{
cout << "const char pointer" << endl;
cout << error << endl;
}
error C2312: 'const char *': is caught by 'const char []'
최종적으로 질문은 'const char *'와 'const char[]'은 throw, catch문에서 같은 것으로 인식되는지 궁금하고 혹시 이유에 대해 설명해주시면 감사하겠습니다.
감사합니다.
답변을 작성해보세요.
3
안소
2021.03.09
같은 것으로 인식 되어 발생하는 에러 맞습니다.
"Negative input" 문자열 리터럴은 const char* error, const char error[] 두 곳에서 다 catch 할 수 있기 때문입니다.
이유에 대해선 포인터와 배열의 관계 생각해주시면 이해되실거에요! (문자열도 문자들로 이루어진 배열이니 포인터로도, char 배열로도 받을 수 있겠죠)
답변 1