Подтвердить что ты не робот

Мне нужно возвращение после исключения исключения (С++ и С#)

У меня есть функция, которая генерирует исключение. Например, следующий код:

void test()
{
    ifstream test("c:/afile.txt");
    if(!test)
    { 
         throw exception("can not open file");
    }
    // other section of code that reads from file.
}

Нужно ли мне возвращать после выброса исключения?

Что в С#?

4b9b3361

Ответ 1

throw обычно приводит к немедленному завершению функции, поэтому даже если вы поместите код после него (внутри одного и того же блока), он не будет выполняться. Это касается как С++, так и С#. Однако, если вы выкинете исключение внутри блока try, и исключение попадет, выполнение будет продолжено в соответствующем блоке catch, и если есть блок finally (только С#), он будет выполнен, исключение выбрано или нет. Во всяком случае, любой код сразу после throw никогда не будет выполнен.

Ответ 2

Строго говоря, бросание НЕ обязательно будет немедленно прекращать функцию... как в этом случае

try {

     throw new ApplicationException();


} catch (ApplicationException ex) {
    // if not re-thrown, function will continue as normal after the try/catch block

} catch (Exception ex) {

}

а затем есть блок finally, но после этого он выйдет.

Итак, нет, вам не нужно возвращаться.

Ответ 3

Нет, вам не нужно возвращать, потому что после исключения вызывается код после этого не будет выполнен.

Ответ 4

После вызова throw метод немедленно вернется и код, следующий за ним, не будет выполнен. Это также верно, если любые исключения выбрасываются и не попадают в блок try / catch.

Ответ 5

Если это метод void, вам никогда не понадобится команда возврата.

Тогда вы не можете поместить ничего после команды throw, он никогда не будет использоваться, если что-то брошено

void test()
{
    ifstream test("c:/afile.txt");
    if(!test)
    { 
         throw exception("can not open file");
         // If there is code here it will never be reach !
    }
    // other section of code that reads from file.
    //if you place code here it will be reach only if you don"t throw an exception, so only if test == true in your case
}

Ответ 6

или вы можете использовать это по-другому.

void test()
{
    ifstream test("c:/afile.txt");
    if(!test)
    { 
         MessageBox.Show("Can't Open the File");
         retrun;
    }
    // other section of code that reads from file.
}