2011-09-25 4 views
3

저는 C++을 처음 사용합니다. 최근에 나는 경우 자동으로 상태 논리 값으로 평가하는 목적에 사용할 수도 어느 ifstream을 연산자 오버로딩 궁금 다음 코드어떤 연산자가 오버로드되어 ifstream 객체가 부울로 평가됩니다.

ifstream in("somefile"); 

if(in){ 
    //read the file.... 
} 

건너. 나는 시도했지만 couldnt는 단서를 찾는다. 도와주세요. 미리 감사드립니다

+0

대답은 여기뿐만 아니라 볼 수 있습니다 : [삭제 코우트; cin을 삭제하십시오; 컴파일 오류를주지 않는다 - 표준 라이브러리의 결함?] (http://stackoverflow.com/questions/7453583/delete-cout-delete-cin-do-not-give-compilation-error-a-flaw-in - 표준 - 1) – Nawaz

답변

3

실제로는 operator void *입니다.

스트림이 유효한 경우 0이 아닌 포인터를 반환하고 그렇지 않으면 NULL 포인터를 반환하도록 재정의됩니다. 반환하는 포인터는 의미가 없으므로 역 참조하면 안됩니다. 부울 컨텍스트에서만 평가됩니다.

3

void 포인터 변환 연산자는이 목적으로 자주 사용됩니다.

explicit operator bool() const; 

그것은 !fail()를 반환이 선언 된 변환 기능이 기본 클래스 std::ios (std::basic_ios<char>)의에서

struct ifstream { 
    typedef void * voidptr; 
    operator voidptr() const; 
}; 
3

std::ifstream와 비슷한 뭔가 bool로의 전환을 가져옵니다.

(표준 ISO/IEC의 이전 버전에서 14882 : 2003 std::basic_ios는 변환 기능 operator void*() const 있었지만 표준의 버전은 철회되었다.)

관련 문제