Начальное значение std :: ifstream проверяется как true при неинициализации - PullRequest
0 голосов
/ 09 октября 2018

Я понял, что когда я проверяю значение std :: ifstream без его инициализации, оно проверяется как истинное.

Как я могу инициализировать свой поток так, чтобы до открытия файла я хотелиспользовать, проверка будет возвращать false?

(Или, может быть, мне не следует использовать значение потока, чтобы определить, открыт ли он?)

Небольшой пример, чтобы показать проблему:

std::ifstream stream;

bool iWantToUseTheStream = false;

if (iWantToUseTheStream)
  stream.open(someFileName, std::fstream::in);

if (stream) // checks as true whether I opened the stream or not !
  std::cout << "I don't want this to print if I did not open the stream !";

1 Ответ

0 голосов
/ 09 октября 2018

Вместо проверки состояния потока в целом, вы можете использовать функцию-член is_open(), чтобы проверить, открыт ли файл.Это сделало бы ваш код похожим на

std::ifstream stream;

bool iWantToUseTheStream = false;

if (iWantToUseTheStream)
  stream.open(someFileName, std::fstream::in);

if (stream.is_open()) // is only true if there is an open file
  std::cout << "I will only print if the file is open";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...