2013-05-31 2 views
19

У меня есть функция, которая генерирует исключение. Например, следующий код:Мне нужно возвращение после исключения бросания (C++ и C#)

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

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

Что такое C#?

+3

Это функция пустоты, поэтому вам не нужно возвращать какое-либо значение. –

+1

Нет, вам не нужно возвращаться –

+1

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

ответ

35

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

+0

Ну, технически вы * можете * что-то там, но оно никогда не будет выполнено. – Angew

+0

@Angew: достаточно справедливо; Я переформулировал свой ответ. :-) –

+1

Имейте +1 :-) Возможно, стоит также упомянуть, что в C++ нет «finally». – Angew

0

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

1

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

0

Если это недействительный метод, вам никогда не понадобится инструкция возврата.

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

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 
} 
3

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

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, но после этого он выйдет.

So no, вам не обязательно возвращаться.

-1

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

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. 
} 
Смежные вопросы