나는이 코드를 우연히 발견했다.std :: ostringstream을 bool로 변환하는 방법은 무엇입니까?
std::ostringstream str;
/// (some usage)
assert(! str);
bool
환경에서 사용하는 경우 ostringstream
의미를 무엇?
컴파일 및 실행시 잘못된 사용이 가능합니까?
나는이 코드를 우연히 발견했다.std :: ostringstream을 bool로 변환하는 방법은 무엇입니까?
std::ostringstream str;
/// (some usage)
assert(! str);
bool
환경에서 사용하는 경우 ostringstream
의미를 무엇?
컴파일 및 실행시 잘못된 사용이 가능합니까?
스트림이 현재 유효한지 알려줍니다. 이것은 모든 스트림이 할 수있는 것입니다. 예를 들어 파일 스트림이 제대로 열리지 않으면 파일 스트림이 유효하지 않을 수 있습니다. 사이드 참고로
은 (a BOOL 같은 스트림 테스트)이 기능은 C++ 11 이상 및 버전에void*
캐스트 연산자 과부하에 의한
C++ 전에 11에
explicit operator bool
과부하에 의해 달성된다. 여기에 some examples of why a stream might fail이 들어있는 링크입니다. 이것은 문자열 스트림에만 국한되지는 않지만 문자열 스트림에만 적용됩니다.
편집 :bool
~ void*
마틴 요크가 내 실수를 지적한 후.
표현식이 유효하며 스트림의 상태를 평가합니다.
istringstream is;
is.str("foo");
int x;
is >> x;
if (! is) {
cerr << "Conversion failed";
}
내가 표준 스트리밍 기능 중 하나는 ostringstream 나쁜 이동시킬 수 있는지 모르겠지만, 당신은 확실히 하나를 직접 쓸 수있다 :이 기능은 더 일반적으로 입력 스트림에 사용됩니다.
실제로 void * cast 연산자가 오버로드되어이 작업을 수행 할 수 있습니다. bool cast 연산자가 사용 된 경우 스트림을 산술 컨텍스트에서 사용할 수 있고 컴파일러는 bool로 캐스팅하여 0/1 값을 사용합니다. 반면에 void *는 산술 문맥에서 사용될 수 없지만 NULL 포인터가 false로 평가 될 때 bool 컨텍스트에서 사용될 수 있습니다. 하지만이 경우 운영자! 명시 적으로 bool 값을 반환하는 데 사용됩니다. –
좋은 지적. 그게 내가 기억에서 얻은 것입니다. ;) – Naaff
난류가 특별히 의미하는 것은 무엇입니까? 아마 기억이 안 나올거야? –