Как происходит конвертация объектов fstream(ifstream/ofstream) в bool
Мне не особо понятно, каким образом объекты классов fstream/ofstream/ifstream конвертируются в bool. Все, что я нашел, это то, что конвертация происходит путем каста к void* и при достижении конца файла мы получаем 0(false). Теперь вопросы:как вообще происходит конвертация? Что мы получаем, как результат каста (адрес на что?)? Что мы получаем, если файл не удается открыть? Можно ли выражения if(!file) использовать как полноценный заменитель file.is_open()? Я так понимаю, что каст проверяет флаги состояния и, если не goobit, то возвращается false. Пример кода:
#include <iostream>
#include <fstream>
int main() {
std::ifstream file("someFile.txt");
if(!file) {
std::cout << "It\'s fine\n";
}
else {
std::cout << "End\n";
}
}
Ответы (1 шт):
Нашел на англоязычном StackOverflow:вот здесь. is_open() проверяет, открыт ли файл и игнорирует все выставленные флаги и готовность файла к вводу/выводу. Каст к bool, в первую очередь, опирается на флаги. Поэтому, если вы сделаете так std::ifstream file, то is_open() выдаст false, а (file) - true.
Дополнено: Ответ найден Здесь