Namespaces
Variants

std::basic_istream<CharT,Traits>:: get

From cppreference.net
int_type get ( ) ;
(1)
basic_istream & get ( char_type & ch ) ;
(2)
basic_istream & get ( char_type * s, std:: streamsize count ) ;
(3)
basic_istream & get ( char_type * s, std:: streamsize count, char_type delim ) ;
(4)
basic_istream & get ( basic_streambuf & strbuf ) ;
(5)
basic_istream & get ( basic_streambuf & strbuf, char_type delim ) ;
(6)
**참고**: C++ 코드와 HTML 태그는 원본 그대로 유지되었으며, 번역이 필요한 일반 텍스트만 한국어로 번역되었습니다.

스트림에서 문자 또는 문자들을 추출합니다.

모든 버전은 UnformattedInputFunction s 로 동작합니다. sentry 객체를 구성하고 검사한 후, 이 함수들은 다음을 수행합니다:

1) 사용 가능한 경우 한 문자를 읽어 반환합니다. 그렇지 않으면 Traits :: eof ( ) 를 반환하고 failbit eofbit 을 설정합니다.
2) 사용 가능한 경우 한 문자를 읽어 ch 에 저장합니다. 그렇지 않으면 ch 를 수정하지 않고 failbit eofbit 를 설정합니다. 이 함수는 서식이 지정된 문자 입력 연산자 >>와 달리 signed char unsigned char 타입에 대해 오버로드되지 않습니다.
3) get ( s, count, widen ( ' \n ' ) ) 와 동일합니다. 즉, 최대 std:: max ( 0 , count - 1 ) 개의 문자를 읽어서 s 가 가리키는 문자열에 저장하며, ' \n ' 를 찾을 때까지 진행합니다.
4) 문자들을 읽어서 s 가 가리키는 첫 번째 요소부터 시작하는 문자 배열의 연속적인 위치에 저장합니다. 다음 중 어떤 조건이 발생할 때까지 문자를 추출하고 저장합니다:
  • count 1 보다 작거나 count - 1 개의 문자가 저장된 경우
  • 입력 시퀀스에서 파일 끝 조건이 발생하는 경우 ( setstate ( eofbit ) 가 호출됨)
  • 다음으로 사용 가능한 입력 문자 c delim 과 동일한 경우 (이는 Traits :: eq ( c, delim ) 에 의해 결정됨). 이 문자는 추출되지 않습니다 ( getline() 과 다름).
어떤 경우에도 count > 0 이면, 널 문자( CharT ( ) )가 배열의 다음 연속 위치에 저장됩니다.
5) get ( strbuf, widen ( ' \n ' ) ) 와 동일합니다. 즉, 사용 가능한 문자를 읽어서 주어진 basic_streambuf 객체에 삽입하며, ' \n ' 를 찾을 때까지 계속됩니다.
6) 문자들을 읽어서 주어진 basic_streambuf 객체가 제어하는 출력 시퀀스에 삽입합니다. 다음 중 어느 하나가 발생할 때까지 문자를 추출하여 strbuf 에 삽입합니다:
  • 입력 시퀀스에서 파일 끝 조건이 발생하는 경우.
  • 출력 시퀀스에 삽입하는 작업이 실패하는 경우 (이때 삽입하지 못한 문자는 추출되지 않음).
  • 다음으로 사용 가능한 입력 문자 c delim 와 동일한 경우, 이는 Traits :: eq ( c, delim ) 에 의해 결정됩니다. 이 문자는 추출되지 않습니다.
  • 예외가 발생하는 경우 (이때 예외는 catch되며 재발생되지 않음).

문자가 추출되지 않았을 경우, setstate ( failbit ) 를 호출합니다.

모든 버전은 추출된 문자 수를 gcount() 값으로 설정합니다.

목차

매개변수

ch - 결과를 기록할 문자에 대한 참조
s - 저장할 문자들을 담을 문자열 포인터
count - s 가 가리키는 문자열의 크기
delim - 추출을 중지할 구분 문자. 추출되지 않으며 저장되지 않음
strbuf - 내용을 읽어올 스트림 버퍼

반환값

1) 추출된 문자 또는 Traits :: eof ( ) .
2-6) * this

예외

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

내부 연산에서 예외가 발생하면, 해당 예외는 catch되어 badbit 이 설정됩니다. 만약 exceptions() badbit 에 대해 설정되어 있다면, 예외가 다시 throw됩니다.

예제

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // 'H'를 읽음
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
    char c2;
    s1.get(c2);         // 'e'를 읽음
    char str[5];
    s1.get(str, 5);     // "llo,"를 읽음
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // 나머지 부분을 읽음 ('\n' 제외)
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

출력:

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 370 C++98 오버로드 (5) 의 효과는 get ( s, count, widen ( ' \n ' ) ) 이었으며,
이는 오버로드 (3) 의 효과임
다음으로 수정됨
get ( strbuf, widen ( ' \n ' ) )
LWG 531 C++98 오버로드 (3,4) count 가 양수가 아닌 경우를
처리할 수 없었음
이 경우에는 문자를
추출하지 않음

참고 항목

문자 블록을 추출합니다
(public member function)
형식화된 데이터를 추출합니다
(public member function)
문자와 문자 배열을 추출합니다
(function template)