>` 추출 실패 시 변수 값을 수정하시겠습니까? " />
실패 시 값 수정에 대한 Stringstream의 일관되지 않은 동작>>
TC PL, 3판, 섹션 21.3.3에서 Stroustrup이 설명한 대로, 읽기 작업이 실패해도 변수 값은 변경되지 않은 상태로 유지되어야 합니다. 그러나 stringstream을 사용할 때 특이한 동작이 발생합니다. >> 데이터 유형이 일치하지 않습니다.
표시된 코드 조각에서 정수 변수 v는 123으로 초기화됩니다. stringstream >>을 사용하여 이 정수로 단어를 읽으려고 하면 원래 값이 보존될 것으로 예상됨에도 불구하고 v 값은 0이 됩니다.
이 명백한 모순은 이전에 C 11 표준의 설명으로 해결되었습니다. 추출에 실패하면 값은 변경되지 않고 실패 비트가 설정되었습니다. 그러나 C 11에서는 이제 변수에 0이 기록되고 실패 비트가 여전히 설정됩니다.
이 변경된 동작의 원인은 다음과 같습니다. std::scanf 스타일 입력 구문 분석에서 std::strtoll 및 C 11의 유사한 함수 사용으로 변경. 이러한 함수는 숫자 변환을 다른 방식으로 처리하므로 추출 시 v가 수정됩니다. 실패.
위 내용은 추출 실패 시 `stringstream >>`이 변수 값을 수정하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!