std :: Ostringstream은 어떻게 bool로 변환됩니까?
-
08-07-2019 - |
문제
나는이 코드를 우연히 발견했다.
std::ostringstream str;
/// (some usage)
assert( ! str );
무엇을 하는가 ostringstream
a에서 사용될 때를 나타냅니다 bool
문맥?
컴파일 및 실행에 발생하는 잘못된 사용이 가능합니까?
해결책
스트림이 현재 유효한지 알려줍니다. 이것은 모든 스트림이 할 수있는 일입니다. 예를 들어 파일이 제대로 열리지 않으면 파일 스트림이 유효하지 않을 수 있습니다.
참고로,이 기능 (BOOL로 스트림 테스트)은 과부하로 달성됩니다. explicit operator bool
C ++ 11 이상 그리고 과부하로 void*
버전의 운영자를 캐스트합니다 C ++ 11 이전.
여기에 링크가 포함되어 있습니다 스트림이 실패 할 수있는 이유의 일부 예. 이것은 문자열 스트림에만 국한되지 않지만 그것에 적용됩니다.
편집하다: 변경 bool
에게 void*
마틴 요크가 내 실수를 지적한 후.
다른 팁
표현식은 유효하며 스트림의 상태를 평가합니다. 이 기능은 입력 스트림에서보다 일반적으로 사용됩니다.
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
표준 스트리밍 기능이 어떻게 타조 스트림이 나빠질 수 있는지 잘 모르겠지만, 확실히 직접 쓸 수 있습니다.
제휴하지 않습니다 StackOverflow