사진과 같이 istream과 ostream은 ios라는 클래스를 상속받고있다.
std::ios
typedef basic_ios<char> ios;
narrow character(= char)을 이용한 모든 스트림의 base class이다.
ios가 상속하고 있는 ios_base는 iostate라는 멤버를 갖고있는데,
stream의 error state 상태는 표현하는 bitmask타입의 flag이다.
표현하는 flag value는 네 가지가 있다.
✅ iostate의 flag value
- eofbit : input stream에서 End-Of-File에 도달했다.
- failbit : internal logic이나 operation에서 에러가 있어 마지막 input을 실패했다.
- badbit : stream buffer에서 input/output operation을 실패해 에러가 발생했다.
badbit가 켜질 땐 failbit도 함께 켜진다.
- goodbit : 에러가 없다. 위 비트가 하나도 켜지지 않은 경우이다.
해당하는 상황에서만 비트가 켜진다.
rdstate() 멤버 함수를 사용하면 현재 error state flags를 확인할 수 있다.
✅ ios의 member functions
ios클래스는 특정 비트가 켜진 상태인지 확인할 수 있는 member functions를 갖고있다.
- good() : stream이 good상태인지 확인 (good이면 true리턴, 아니면 false 반환)
- eof() : eof 비트가 켜져있는 지 확인 (good이면 true리턴, 아니면 false 반환)
- fail(): fail 비트가 켜져있는 지 확인 (good이면 true리턴, 아니면 false 반환)
- bad() : bad 비트가 켜져있는 지 확인 (good이면 true리턴, 아니면 false 반환)
그 외에도 stream을 관리하기에 용이한 멤버 함수들을 가지고있다.
- operator! : failbir나 badbit가 켜져있는 지 확인 (둘 중 하나라도 켜져있다면 true, 둘 다 꺼져있다면 false 반환)
- operator bool failbir나 badbit가 켜져있는 지 확인 (둘 중 하나라도 켜져있다면 null, 둘 다 꺼져있다면 0이 아닌 다른 값 반환)
- rdstate : 현재 error state flags 반환
- setstate : 현재 error state flags에 새로운 bit를 추가로 켠다.
void ios::setstate (iostate state) {
clear(rdstate()|state);
}
- clear : error state flags를 새로운 값으로 설정한다. 기본값은 goodbit이다.
📝 Note
std::cin
narrow characters(= char)를 지향하는 표준 입력 스트림을 나타내는 stream이다. C stream stdin에 해당한다.
- wide characters(= wchar_t)를 지향하는 표준 입력 스트림인 std::wcin도 존재한다.
C stream
bandwidth limiting, FIFO, audio, duplication, extended reporting support을 지원하는 direct data stream이다.
📖 ios
📖 ios_base
📖 ios_base::iostate
📖 cin
📖 wcin
📖 C stream