Учитывая: 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
указать, если сделана попытка чтения после конца файла - в некоторых случаях этого не происходит, но в большинстве случаев это одно и то же.