C++ named requirements: UnformattedInputFunction
From cppreference.net
요구사항
UnformattedInputFunction 은 다음을 수행하는 스트림 입력 함수입니다:
1)
자동 저장 기간과 함께
basic_istream::sentry
타입의 객체를 생성하며,
noskipws
인수가
true
로 설정되어 다음과 같은 작업을 수행합니다:
-
입력 스트림에서
eofbit
또는
badbit
가 설정된 경우,
failbit
도 함께 설정합니다. 또한 이 입력 스트림의
예외 마스크
에서
failbit에 대한 예외가 활성화된 경우( ( exceptions ( ) & failbit ) ! = 0 ), ios_base::failure 를 발생시킵니다. - 해당되는 경우 tie()된 출력 스트림을 플러시합니다.
2)
센트리의 상태를
sentry::operator bool()
을 호출하여 확인합니다. 이는
basic_ios::good
과 동일합니다.
- 연산자가 false 를 반환하거나 센트리의 생성자가 예외를 던지는 경우:
-
- 입력 스트림에서 추출된 문자 수(gcount)를 0으로 설정합니다.
-
함수가
CharT배열에 쓰기 위해 호출된 경우, 배열의 첫 번째 위치에CharT()(널 문자)를 기록합니다.
- 연산자가 true 를 반환하면, rdbuf ( ) - > sbumpc ( ) 또는 rdbuf ( ) - > sgetc ( ) 를 호출하는 것처럼 입력을 수행합니다.
-
-
스트림의 끝에 도달한 경우(
rdbuf
(
)
-
>
sbumpc
(
)
또는
rdbuf
(
)
-
>
sgetc
(
)
호출이
Traits
::
eof
(
)
를 반환),
eofbit을 설정합니다. 이 스트림의 예외 마스크 에서eofbit에 대한 예외가 활성화된 경우( ( exceptions ( ) & eofbit ) ! = 0 ), ios_base::failure 를 던집니다. -
입력 중 예외가 발생하면 입력 스트림에서
badbit을 설정합니다. 이 스트림의 예외 마스크 에서badbit에 대한 예외가 활성화된 경우( ( exceptions ( ) & badbit ) ! = 0 ), 예외가 다시 던져집니다.
-
- basic_ios::clear 에서 발생한 예외는 잡히거나 다시 던져지지 않습니다.
- 입력 중 예외가 발생하지 않으면 입력 스트림에서 추출된 문자 수(gcount)를 설정합니다.
-
스트림의 끝에 도달한 경우(
rdbuf
(
)
-
>
sbumpc
(
)
또는
rdbuf
(
)
-
>
sgetc
(
)
호출이
Traits
::
eof
(
)
를 반환),
3)
어떤 경우든, 예외로 종료되든 반환으로 종료되든, 센트리의 소멸자는 이 함수를 떠나기 전에 호출됩니다.
표준 라이브러리
다음 표준 라이브러리 함수들은 UnformattedInputFunction s 입니다.
- std::getline , 단 gcount를 수정하지 않는다는 점이 다름.
- basic_istream::operator>> (basic_streambuf*)
- basic_istream::get
- basic_istream::getline
- basic_istream::ignore
- basic_istream::peek
- basic_istream::read
- basic_istream::readsome
-
basic_istream::putback
, 단 먼저
eofbit을 지운다는 점이 다름 -
basic_istream::unget
, 단 먼저
eofbit을 지운다는 점이 다름 - basic_istream::sync , 단 gcount를 수정하지 않는다는 점이 다름
- basic_istream::tellg , 단 gcount를 수정하지 않는다는 점이 다름
-
basic_istream::seekg
, 단 먼저
eofbit을 지우고 gcount를 수정하지 않는다는 점이 다름 - std::ws , 단 gcount를 수정하지 않는다는 점이 다름
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 61 | C++98 |
eofbit
및/또는
failbit
설정으로 인해
예외를 던지는 경우
badbit
설정 여부가 불명확했음
|
basic_ios::clear
에서 던져진 예외는 catch되거나 재던져지지 않음 |
| LWG 160 | C++98 |
catch된 예외의 재던짐 여부 결정 과정에서
존재하지 않는 함수
exception()
을 언급함
|
exceptions() 로 수정됨 |
| LWG 243 | C++98 |
sentry::operator bool()
가
false
를 반환하거나 sentry 객체 생성이 실패할 때의 동작이 명시되지 않음 |
명시됨 |