문제

나는이 코드를 우연히 발견했다.

    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";
}

표준 스트리밍 기능이 어떻게 타조 스트림이 나빠질 수 있는지 잘 모르겠지만, 확실히 직접 쓸 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top