2009-05-07 4 views

답변

10

스트림이 현재 유효한지 알려줍니다. 이것은 모든 스트림이 할 수있는 것입니다. 예를 들어 파일 스트림이 제대로 열리지 않으면 파일 스트림이 유효하지 않을 수 있습니다. 사이드 참고로

은 (a BOOL 같은 스트림 테스트)이 기능은 C++ 11 이상 및 버전에 void* 캐스트 연산자 과부하에 의한 C++ 전에 11explicit operator bool 과부하에 의해 달성된다.

여기에 some examples of why a stream might fail이 들어있는 링크입니다. 이것은 문자열 스트림에만 국한되지는 않지만 문자열 스트림에만 적용됩니다.

편집 :bool ~ void* 마틴 요크가 내 실수를 지적한 후.

+4

실제로 void * cast 연산자가 오버로드되어이 작업을 수행 할 수 있습니다. bool cast 연산자가 사용 된 경우 스트림을 산술 컨텍스트에서 사용할 수 있고 컴파일러는 bool로 캐스팅하여 0/1 값을 사용합니다. 반면에 void *는 산술 문맥에서 사용될 수 없지만 NULL 포인터가 false로 평가 될 때 bool 컨텍스트에서 사용될 수 있습니다. 하지만이 경우 운영자! 명시 적으로 bool 값을 반환하는 데 사용됩니다. –

+0

좋은 지적. 그게 내가 기억에서 얻은 것입니다. ;) – Naaff

+0

난류가 특별히 의미하는 것은 무엇입니까? 아마 기억이 안 나올거야? –

1

표현식이 유효하며 스트림의 상태를 평가합니다.

istringstream is; 
is.str("foo"); 
int x; 
is >> x; 

if (! is) { 
    cerr << "Conversion failed"; 
} 

내가 표준 스트리밍 기능 중 하나는 ostringstream 나쁜 이동시킬 수 있는지 모르겠지만, 당신은 확실히 하나를 직접 쓸 수있다 :이 기능은 더 일반적으로 입력 스트림에 사용됩니다.