대답 할 때 this question 나는 정말로 나를 혼란스럽게하는 연구를했다.연산자 우선 순위 (void * before bool?)
성공적으로 열린 ifstream 두 개가 동일하지는 않지만 두 개의 ifstream이 실패한 것으로 나타났습니다. 처음에는 cplusplus.com을 확인했습니다. operator !
은 badbit 및 failbit의 상태를 반환합니다. 나는 이것의 반대가 여전히이 두 비트의 상태를 되 돌리는 것이지만, 뒤집힌 것이라고 생각한다. 잘못된
- , 두 개의 성공적인 호출이 동일하지 않기 때문에.
그런 다음 나는 뭔가를 반환 할 operator bool
어딘가에 있다고 생각했습니다. 그래서 ifstream에서 되돌아 가려고 시도하고 istream::operator bool()
을 발견했습니다. 이는 _Ok
을 반환합니다.
- 아직도 잘못 그러나이 전혀 호출하지 않는 것 (두 성공적인 호출은 여전히 동일하지 않기 때문에, 수 없습니다).
그래서 접근 방식을 변경하고 Visual Studio에서 디스 어셈블리를 확인했습니다. 그리고 나는 무엇을 발견합니까?
if (file0 != file1) {
은 operator bool()
, 이 아니고 operator void*()
(또는 실제로는 __imp_std::ios_base::operator void *
)이라고합니다.
그래서
- 어떤
operator bool()
가 포인터 값으로 캐스팅하기 전에 호출 발견 안 나는이 가지고있는 질문 ..? - 다소
operator bool()
내가 놓친 것은operator void*
입니까? 이해가 안되는 부분이 최적화되어 있습니까?
아니면 실제로
void*
이 비교bool
보다 더 나은 일치 생각하는 C++ 에서 완전히 잘못입니까?
아, 그렇습니다. 알겠습니다. 고마워, 나는 여기에 피곤해진다. 나는 이것에 대한 후속 질문을 가지고있다. 어쩌면 당신은 [이 하나] (http://stackoverflow.com/q/4294873/238902 "void void *와 operator bool을 둘 다 정의 할 수있다)라고 대답 할 수있다. – Default
그러나 ifstream은 실제로 operator! =가 아닌 void * 연산자를 호출합니다. – Default