В каких случаях варианты 1 и 2 дают разные результаты / поведение?Они эквивалентны во всех отношениях?
Я пытался с несуществующим in_out/sample2.txt
вызвать исключение, и они ведут себя одинаково.
int main() {
string fnamein2 = "in_out/sample2.txt";
ifstream ifstr;
try {
cout << "Reading " << fnamein2 << endl;
ifstr.open(fnamein2);
ifstr.exceptions( ifstream::eofbit | ifstream::failbit | ifstream::badbit );
} catch(const exception &e) { // <-- Option 1
//} catch(const ifstream::failure &e) { // <-- Option 2
cout << "There was an error: " << e.what() << endl;
}
return 0;
}