std::error_code

std::error_code (오류 코드)

운영체제·저수준 API의 오류 코드를 저장·비교·설명하는 타입이에요. 정수 오류 값과 카테고리(error category) 포인터를 결합해, 같은 값이라도 카테고리가 다르면 별개의 오류로 취급돼요. C++11부터 있어요.

출처: cppreference

본문

<system_error> 헤더에 정의돼 있고, 오류 코드를 나타내는 타입이에요.

class error_code;

std::error_code는 운영체제나 저수준 인터페이스에서 온 오류 코드를 나타내요. 내부적으로 정수형 오류 값(int)과 std::error_category에 대한 포인터를 보관해요. 카테고리 덕분에 같은 정수 값이라도 서로 다른 오류 시스템(예: POSIX vs Win32)에서는 구별돼요.

멤버 함수:

  • (생성자) error_code()(기본), error_code(int, const error_category&), 템플릿 생성자(Enum→ErrorCodeEnum 변환) 등.
  • operator int() / value(): 저장된 오류 코드의 정수 값을 돌려줘요.
  • category(): 오류 코드의 카테고리를 돌려줘요.
  • message(): 이 코드의 사람이 읽을 수 있는 설명 문자열을 돌려줘요.
  • default_error_condition(): 이 코드에 대응되는 std::error_condition을 돌려줘요.
  • clear(): 코드를 0으로 초기화해요.
  • assign(int, const error_category&): 코드를 설정해요.
  • operator==/operator!=: 두 코드를 비교해요. (값과 카테고리가 모두 같아야 같아요.)
  • operator bool: 코드가 0이 아닌지(오류 존재) 확인해요.

일반적인 사용 패턴:

#include <system_error>
#include <iostream>

std::error_code ec;
// 예: 어떤 연산 수행, 실패 시 ec에 오류 설정
if (ec)
    std::cout << "Error: " << ec.message() << " (" << ec.value() << ")\n";

std::error_code는 값 타입으로 복사·대입이 자유롭고, C 함수의 반환 코드나 시스템 호출 실패를 객체로 캡슐화하는 데 널리 쓰여요. std::system_error 예외가 내부에 error_code를 담아요.

더 알아보기 (Learn more)

cppreference