Как сказано в заголовке, есть ли способ ускорения для выполнения того же самого, что и с fstream, но с разницей, которую он выбрасывает при сбое, а не устанавливает какой-либо флаг внутри потока?
Я знаю, что могу вручную проверить и вернуть / выбросить, но я предпочитаю не засорять свой код чеками ...
Есть ли ускоренный эквивалент fstream, который выдает ошибку при открытии файла?
Ответы (1)
Мое мышление:
Использование потоков с исключениями и «не загрязнять [...] код проверками» приведет к появлению в вашем коде бесполезных диагностических сообщений:
#include <iostream>
#include <fstream>
int main() {
std::fstream f;
f.exceptions(std::ios_base::failbit);
try {
f.open("Not-Existing");
int formatted_value;
f >> formatted_value; // No matching input.
// ... and imagine more
if(f.eof()) { /* To ensure the entire stream is consumed, is not handled */ }
}
catch(const std::exception& e) {
std::cerr << "Failure [Something turned out wrong]" << std::endl;
}
}
person
Community
schedule
03.01.2014
Я не думаю, что исключения - хорошая идея, но если вы действительно хотите пойти по этому пути, вы, вероятно, захотите отключить исключения перед чтением. В противном случае вы также получите исключение для конца файла.
- person James Kanze; 03.01.2014
@JamesKanze Я не говорю, что «исключения - хорошая идея» в этом контексте!
- person ; 04.01.2014
ios_base::exceptions
так, чтобыios_base::failure
выдавался, когдаfailbit
включен в маске ожидания (что включает в себя неудачное открытие). - person 0x499602D2   schedule 03.01.2014