Как говорится в заголовке, есть ли способ ускорить то же самое, что и с fstream, но с diff, который он будет бросать на неудачу, не установить какой-либо флаг внутри потока?
Я знаю, что могу вручную проверять и возвращать/бросать, но я предпочитаю не менять свой код с помощью проверок...
Мое мышление:
Использование потоков с исключениями и "не использовать polute [...] код с проверками" приведет к созданию бесполезных диагностических сообщений в вашем коде:
#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;
}
}
ios_base::exceptions
так, чтобыios_base::failure
когдаfailbit
включен в маске ожидания (которая включает в себя ошибку открытия).