приоритет оператора (void * before bool?)

Отвечая на этот вопрос , я провел небольшое исследование, которое меня действительно смущает.

Я заметил, что два успешно открывающихся потока 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 в этом сравнении?

8
задан Community 23 May 2017 в 12:04
поделиться