Обработка исключений в C ++: исключение против ifstream :: fail - PullRequest
0 голосов
/ 09 июня 2019

В каких случаях варианты 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;
}

1 Ответ

1 голос
/ 09 июня 2019

Нет разницы в вашем сценарии.std::ifstream::failure является специализированной версией std::exception (содержит более подробную информацию), но в вашем случае вы не использовали их.

std::ifstream::failure имеет code метод, который дает вам больше информации об ошибке.Но если вам это не нужно, вы можете использовать базовый класс.

...