> 백엔드 개발 > C++ > C 11 이상에서 추출 실패 시 `stringstream >>`이 대상 변수를 0으로 만드는 이유는 무엇입니까?

C 11 이상에서 추출 실패 시 `stringstream >>`이 대상 변수를 0으로 만드는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-01 06:16:12
원래의
722명이 탐색했습니다.

Why Does `stringstream >>` C 11 이상에서 추출 실패시 대상 변수를 제로화 하시겠습니까?
>` C 11 이상에서 추출 실패 시 대상 변수를 0으로 설정하시겠습니까? " />

stringstream >> 실패 시 Target의 값을 변경하는 이유는 무엇입니까?

Stroustrup의 "TC PL, 3판"에서 인용된 구절에서 저자는 값이 다음과 같이 명시되어 있습니다. 추출 작업이 실패하면 v는 변경되지 않은 상태로 유지되어야 합니다. 그러나 문자열 스트림 >> 실패합니다.

모순되는 동작 설명

이 명백한 모순을 이해하는 열쇠는 C 11 전후의 추출 연산자 >>의 다른 동작에 있습니다.

C 전 11

C 11 이전에는 >> 추출에 실패하면 v 값을 변경하지 않고 그대로 두고 Failbit 플래그를 설정했습니다.

C 11 이후

C 11로, >> 업데이트된 사양에 따라 추출에 실패하면 std::num_get 패싯을 사용하도록 전환되었습니다.

  • int와 같은 기본 유형의 경우 v에 0이 기록되고 실패 비트가 표시됩니다. 플래그가 설정되었습니다.
  • std::numeric_limits::max() 또는 std::numeric_limits::min()이 v에 기록되고 Failbit 플래그가 설정됩니다.

출력 설명 예시

제공된 예시에서:

  • v의 값은 초기에 123.
  • v에서 단어를 읽으려고 시도한 후(실패함) v의 값은 0으로 설정됩니다.
  • 문자열 스트림의 rdstate()는 실패 비트가 설정되었음을 나타내며 추출 실패.

이 동작은 >>의 업데이트된 동작과 일치합니다. C 11에서 소개되었습니다.

위 내용은 C 11 이상에서 추출 실패 시 `stringstream >>`이 대상 변수를 0으로 만드는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿