какая перегрузка оператора была использована для объекта ifstream, который нужно перевести в логическое значение - PullRequest
3 голосов
/ 25 сентября 2011

Я новичок в C ++. недавно наткнулся на следующий код

ifstream in("somefile");

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

Мне интересно, какой оператор, перегружающий ifstream, мог бы использовать для объекта in для автоматической оценки логического условия if Я пытался, но не мог найти подсказку. Помогите мне, пожалуйста. заранее спасибо

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011

Оператор преобразования пустых указателей часто используется для этой цели. Нечто похожее на

struct ifstream {
  typedef void * voidptr;
  operator voidptr() const;
};
3 голосов
/ 25 сентября 2011

std::ifstream получает преобразование в bool из своего базового класса std::ios (std::basic_ios<char>), для которого объявлена ​​функция преобразования:

explicit operator bool() const;

Возвращает !fail().

(В предыдущей версии стандарта ИСО / МЭК 14882: 2003 std::basic_ios имел функцию преобразования operator void*() const, но эта версия стандарта теперь отменена.)

3 голосов
/ 25 сентября 2011

Это на самом деле оператор void *.

Переопределяется, чтобы возвращать ненулевой указатель, если поток допустим, и указатель NULL в противном случае.Указатель, который он возвращает, не имеет смысла и не должен разыменовываться, он только там должен оцениваться в логическом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...