[c++] stream 관리(ios_base, ios, std::cin)

숭글·2022년 12월 21일
0

사진과 같이 istream과 ostream은 ios라는 클래스를 상속받고있다.

std::ios

typedef basic_ios<char> ios;

narrow character(= char)을 이용한 모든 스트림의 base class이다.

ios가 상속하고 있는 ios_baseiostate라는 멤버를 갖고있는데,
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); 
  // 파라미터로 넣은 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

profile
Hi!😁 I'm Soongle. Welcome to my Velog!!!

0개의 댓글