Консультация № 195883
21.06.2019, 21:38
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

вопрос относится к работе с файлами в с++, я использую: g++ (MinGW.org GCC-8.2.0-1) 8.2.0

в некоторых источниках в интернете при проверке открылася ли файл, проверяют по разному Лекции по C/C++: работа с файлами (fstream)Работа с файлами в С++
вариант 1
if(file.is_open())
вариант 2
if(!file)
если разница между ними или нет? если да то какой вариант лучше использовать?

Обсуждение

давно
Старший Модератор
31795
6196
25.06.2019, 13:14
общий
это ответ
Здравствуйте, Arthur!

С точки зрения логики работы программы - различий нет.
Различия появляются при генерации кода.
Создав объект file класса fstream и открывая нужный файл file.open(), сам класс заполняет, некоторые внутренние переменные и file.is_open(), только возвращает значение одной из них - opened.
Код:
inline int  _Cdecl filebuf::is_open()   { return opened; }

Которое находится в закрытой секции, и на прямую не доступно.
Код:
protected:
int xfd; // the file descriptor, EOF if closed
int mode; // the opened mode
short opened; // non-zero if file is open

Когда Вы используете !file, то компилятором подключается автоматическое привидение типа объект к логическому типу, это несколько длинее по времени и коду.
Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа