• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[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문에서 같은 것으로 인식되는지 궁금하고 혹시 이유에 대해 설명해주시면 감사하겠습니다.

감사합니다.

 

답변 1

답변을 작성해보세요.

3

안소님의 프로필

안소

2021.03.09

https://docs.microsoft.com/sv-se/cpp/error-messages/compiler-errors-1/compiler-error-c2312?view=msvc-160&viewFallbackFrom=vs-2019

같은 것으로 인식 되어 발생하는 에러 맞습니다. 

"Negative input" 문자열 리터럴은 const char* error, const char error[] 두 곳에서 다 catch 할 수 있기 때문입니다.

이유에 대해선 포인터와 배열의 관계 생각해주시면 이해되실거에요! (문자열도 문자들로 이루어진 배열이니 포인터로도, char 배열로도 받을 수 있겠죠)