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::...) 등이 가능해요.