Отвечая на этот вопрос , я провел небольшое исследование, которое меня действительно смущает.
Я заметил, что два успешно открывающихся потока if не равны, а два потока if, которые не работают, равны.
Сначала я проверил cplusplus.com. Оператор !
возвращает состояние битой биты и битой ошибки. Я думаю, что наоборот все равно было бы вернуть статус этих двух битов, но перевернутый.
Тогда я решил, что это был оператор bool
где-то, который что-то возвращает. Итак, я попытался вернуться к ifstream и нашел istream :: operator bool ()
, который возвращает _Ok
.
Так что я изменил свой подход и проверил разборку из Visual Studio. И что я могу найти? if (file0! = File1) {
doesn ' t вызвать оператор bool ()
, , а скорее оператор void * ()
(или на самом деле __ imp_std :: ios_base :: operator void *
) .
Итак, у меня есть следующие вопросы:
оператор bool ()
, прежде чем пытаться преобразовать его в значения указателя? оператор bool ()
Я пропустил, что, в свою очередь, вызывает оператор void *
? Это какая-то оптимизация, которую я не делаю? Не понимаю?
Или я полностью ошибаюсь в том, что C ++ действительно считает , что void *
лучше соответствует, чем bool
в этом сравнении?