объект возвращается после исключения? - PullRequest
1 голос
/ 08 мая 2009
   int somefunction(bool a)
    {
      try
      {
        if(a)
        throw Error("msg");
        return 2;
      }
     catch (Error const & error)
     {
       //do i need to return anything here??
       //return -1;
     }
    }

Ответы [ 6 ]

6 голосов
/ 08 мая 2009

Вам нужно либо вернуть что-либо, либо повторно выдать исключение (или выдать новое). Вы можете сбросить то же исключение, просто используя ключевое слово

throw

в блоке catch без исключений или аргументов после этого.

1 голос
/ 08 мая 2009

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

Тем не менее, вы можете выйти из функции int двумя способами:

  • возвращает int
  • выдает исключение
1 голос
/ 08 мая 2009

Функция возвращает int, поэтому вам нужно вернуть int. Альтернатива не в том, чтобы перехватить исключение в функции и позволить ему распространиться.

1 голос
/ 08 мая 2009

Если вы ничего не вернете туда, вызываемый, возможно, впоследствии сделает неправильную вещь, потому что возвращаемое значение будет неопределенным и возможно получит один из действительных кодов возврата! Попробуйте это:

printf("%i\n", somefunction(false));
printf("%i\n", somefunction(true));

Выход:

2
2293512

Компилятор также выдает предупреждение об этом (например, "управление достигает конца не пустой функции").

0 голосов
/ 08 мая 2009

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

0 голосов
/ 08 мая 2009

Если вы не выбросите исключение, вам нужно вернуть int (предположительно, значение часового датчика).

...