본 포스팅은 인프런사이트(www.inflearn.com)의 "홍정모의 따라하며 배우는 C++" 유로강의를
자비로 구매해 복습하기 위한 용도로 올리는 포스트입니다.
해당 코드나 사진의 모든 저작권은 강의 제작자인 홍정모 교수님에게 있습니다.
흔히 우리가 오류인 상황? 예외인 상황을 return -1로 표현을 한다거나, Flag 역할을 하는 bool 타입의 변수를 하나 선언해서 인자로 전달하는 경우를 많이 사용하게 된다. 정통적인 C++ 스타일의 코드이며, 실제로 많이 사용되는 코드이다.
예외 처리가 주로 사용되는 경우는 '예측할 수 없는 일이 많이 벌어지는 경우' 이다.
네트워크 환경이라던가, 게임을 사용하는 유저가 갑작스런 돌발행동이 일어난다거나 등 우리가 예측하기 힘든 경우를
예외처리하고, 작업을 지속하기 위해 사용한다.
try, throw, catch 키워드가 주로 사용되며 각 역할은 이와 같다.
* try = 말 그대로 시도하는 것이다. 해당 { }의 코드를 실행한다.
* throw = 해당 예외 사항을 던져주는 것이다.
* catch = throw에서 던져준 예외사항을 잡아서 실행하는 구문이다.
여기서 가장 중요한 건, throw에서 던져준 데이터 타입이 catch의 인자 데이터 타입과 정확히 일치해야한다는 것이다.
100을 x에 넣으면 우선 try가 실행되고, if문을 거치지 않고 std::sqrt(x)가 실행되고 종료된다.
현재 throw를 하는 "Negative input"은 const char* 타입이다. std::string 타입이 아니기에
해당 catch 구문은 이 예외를 잡을 수 없어 runtime-error가 난다.
throw에서 던지는 -1.0은 double형 타입이다.
그렇기에 catch 구문에서 -1.0을 잡을 수 없어 오류가 난다.
형변환은 자동적으로 해주지 않는다는, 즉 엄격하다는 의미이다.
예외처리이니까, 당연히 엄격해야할 것이다.
그러다보니, 자료형 캐스팅을 자동으로 해주지 않는다.
'C++(따라하며 배우는 C++)' 카테고리의 다른 글
Chapter 14-(2). 예외 처리 (0) | 2021.11.19 |
---|---|
Chapter 13-(4). 템플릿 (포인터, 멤버 함수 한번 더 템플릿) (0) | 2021.11.12 |
Chapter 13 -(3). 템플릿을 부분적으로 특수화 (0) | 2021.11.11 |
Chapter 13-(2). 템플릿 Template (template<> specialization) (0) | 2021.11.09 |
Chapter 13 - (1). 템플릿 Template (0) | 2021.11.07 |