Учитывая: ifstream infile("test.txt") есть ли преимущество в использовании if(!infile)... по сравнению с if(infile.good())...?

Я наткнулся на этот код в моем чтении:

void assure(std::ifstream& infile ) {  
  if(!infile) { /* stuff */}
}

Я проверил на любопытство, используя типы аргументов функции ifstream& а также ifstreamи это похоже на работу. Мне было любопытно, как может работать условное выражение. Это случай пустого объекта или пустого объекта? Я думал, что объект C++ не может быть NULL?

поскольку !infile работает, как не удалось ifstream объект представлен?

Спасибо за последующее просветление.

2 ответа

Решение

Он использует оператор отрицания, и он просто подключен к fail() проверять.

Это не совсем противоположность good(), так как этот также проверяет на EOF (eofbit).

(И да, ссылка всегда указывает на объект, вопрос не имеет смысла, только указатель может быть НЕДЕЙСТВИТЕЛЕН).

Это не будет иметь большого значения, нет. Оба приведут к очень похожему коду и тому же поведению. Разница в поведении на eof, который good вернусь false где operator! видит это как true, Однако в большинстве случаев это мало что меняет, так как failbit будет установлен в fstream указать, если сделана попытка чтения после конца файла - в некоторых случаях этого не происходит, но в большинстве случаев это одно и то же.

Другие вопросы по тегам