Поведение в открытом режиме для fstream, ifstream и ofstream

Такой концепции не существует на любом языке, о котором я знаю. Вы можете поднять одно исключение последовательно, но не поднимать несколько исключений за один раз, и даже при работе над несколькими потоками для повышения «одновременно» все еще исключение возникает в разных потоках управления.

Когда возникает исключение, поток управления переходит к этому исключению. У вас есть два варианта: сделать что-нибудь об этом или сбой. Третий вариант отсутствует, и отдельный поток управления не появился и продолжается до тех пор, пока это исключение не будет рассмотрено соответствующим образом.

Если вы хотите увидеть несколько сбоев, как указано в комментарии, тогда вы все равно делайте это по одному, как и они будут подняты. Исключение возникает, вы проверяете, регистрируетесь, делаете что угодно, подавляете его и видите следующее, если кто-то поднимается на что-то еще.

Если вы спрашиваете, как можно увеличить несколько необработанных исключений, тогда это действительно не имеет смысла. Сложно спросить, как быть в двух местах одновременно.

2
задан BenevolentDeity 19 January 2019 в 21:26
поделиться

1 ответ

explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);

[ifstream.cons] / 2 Создает объект класса basic_­ifstream<charT, traits> ... затем вызывает rdbuf()->open(s, mode | ios_­base::in)

Аналогично, в [ofstream.cons] / 2 упоминается mode | ios_base::out для basic_ofstream. Тем не менее, конструктор fstream пропускает режим напрямую:

[fstream.cons] / 2 ... Затем вызывает rdbuf()->open(s, mode) [1114 ]

Значение mode определяется этой таблицей в [filebuf.members] в терминах строки режима, переданной в fopen из C стандартная библиотека. Значение этого, в свою очередь, определено в стандарте C.

0
ответ дан Igor Tandetnik 19 January 2019 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: