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::failure는 std::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';
}
}