std::ios_base::failure

std::ios_base::failure (I/O 오류 예외)

I/O 라이브러리의 함수가 실패할 때 던져지는 예외 객체를 정의하는 클래스예요. C++11 이후로 오류 코드를 포함해요.

출처: cppreference

본문

<ios> 헤더에 정의돼 있어요.

class failure;

클래스 std::ios_base::failure는 I/O 라이브러리의 함수가 실패할 때 던져지는 예외 객체를 정의해요. std::ios_base::failurestd::ios_base의 멤버 클래스이거나, 동등한 기능을 가진 다른 클래스의 typedef(동의어)로 정의될 수 있어요(C++17부터).

멤버 함수

  • (constructor) — 주어진 메시지로 새 failure 객체를 생성해요.
  • operator= — failure 객체를 교체해요.
  • what — 설명 문자열을 돌려줘요.

생성자

// (1) C++11까지
explicit failure( const std::string& message );

// C++11부터
explicit failure( const std::string& message,
                  const std::error_code& ec = std::io_errc::stream );   // (1)
explicit failure( const char* message,
                  const std::error_code& ec = std::io_errc::stream );   // (2)

기본 오류 코드는 std::io_errc::stream이에요. 스트림 오류를 파악하는 데 code()를 쓸 수 있어요.

상속

C++11 이전에는 std::exception과 결합돼 있었고, C++11부터는 std::system_error를 기반으로 해 오류 코드를 제공해요.

예제

#include <fstream>
#include <iostream>

int main()
{
    std::ifstream f("missing.txt");
    f.exceptions(std::ios::failbit);
    try
    {
        int x;
        f >> x; // 실패
    }
    catch (const std::ios_base::failure& e)
    {
        std::cout << e.what() << '\n';
        std::cout << e.code() << '\n';
    }
}

더 알아보기 (Learn more)

cppreference