std::system_error

std::system_error (시스템 오류 예외)

운영체제나 저수준 시스템 오류를 보고하기 위해 던져지는 예외예요. 내부에 std::error_code를 보관해 오류 코드·카테고리·메시지를 함께 전달해요. C++11부터 있어요.

출처: cppreference

본문

<system_error> 헤더에 정의돼 있고, std::runtime_error에서 파생되는 예외예요.

class system_error : public runtime_error;

std::system_error는 시스템(운영체제) 오류를 나타내는 예외로, std::runtime_error에서 파생되고 내부에 std::error_code를 보관해요. 오류 코드와 카테고리, 그리고 사람이 읽을 수 있는 메시지를 함께 전달할 수 있어요.

생성자:

  • system_error( std::error_code ec, const std::string& what_arg );
  • system_error( std::error_code ec, const char* what_arg );
  • system_error( int ev, const std::error_category& ecat, const std::string& what_arg ); 등.

멤버 함수:

  • code() const noexcept: 예외에 담긴 std::error_code를 돌려줘요.
  • what() const noexcept: 생성 시 전달한 메시지와 함께 오류 코드 정보를 포함한 설명을 돌려줘요(예: "message: N" + "code: E" + "오류").

std::filesystem, std::thread, std::future, 파일 스트림 등이 시스템 호출 실패를 보고할 때 이 예외를 던져요. 전형적인 사용:

#include <system_error>
#include <filesystem>
#include <iostream>

try
{
    std::filesystem::create_directories("a/b/c"); // 권한 없으면 실패
}
catch (const std::system_error& e)
{
    std::cerr << e.what() << "\nerror code: " << e.code() << '\n';
}

이렇게 code()로 오류 코드를 얻어 프로그램적으로 처리하거나, what()으로 사용자에게 보여줄 수 있어요. std::error_code를 보관하므로 e.code().message(), e.code().value(), 카테고리 비교(e.code() == std::errc::...) 등이 가능해요.

더 알아보기 (Learn more)

cppreference