std::exception

std::exception (모든 표준 예외의 기초 클래스)

표준 라이브러리가 던지는 모든 예외의 기초 클래스예요. 파생 클래스들이 what()을 오버라이드해 오류 설명 문자열을 제공해요.

출처: cppreference

본문

<exception> 헤더에 정의돼 있고, 표준 예외 계층의 기초 클래스예요.

class exception;

std::exception은 표준 라이브러리 구성 요소가 던지는 모든 예외의 기초 클래스로, 특정 조건(표현식이 잘못됨, 함수가 범위를 벗어난 인자를 받음 등)이 발생했을 때를 알려줘요. 파생 클래스는 what()을 오버라이드해 오류의 원인에 대한 문자 정보를 제공해요.

멤버:

  • (생성자) exception(): 예외 객체를 생성해요. (이동 생성 포함)
  • what() const noexcept: 예외를 설명하는 널 종료 문자 시퀀스를 돌려줘요. 반환된 포인터는 파생 객체가 소멸되거나 그 위에서 비-const 멤버 함수(예: 대입)가 호출되기 전까지 유효함이 보장돼요.
  • (소멸자) 가상 소멸자 — 다형적으로 소멸되도록 virtual이며 noexcept예요.

what()의 기본 구현은 구현 정의 문자열(종종 클래스 이름)을 돌려줘요. 종종 "std::exception"을 반환해요.

모든 표준 예외 타입(예: std::logic_error, std::runtime_error, std::bad_alloc, std::system_error 등)은 std::exception에서 (직접 또는 간접적으로) 파생돼요. 따라서 catch (const std::exception& e) 구문만으로 대부분의 표준 예외를 잡고 e.what()으로 설명을 출력할 수 있어요.

try
{
    // 예외를 던질 수 있는 작업
    throw std::runtime_error("something went wrong");
}
catch (const std::exception& e)
{
    std::cerr << "Error: " << e.what() << '\n';
}

더 알아보기 (Learn more)

cppreference