Вопрос

   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;
     }
    }
Это было полезно?

Решение

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

throw

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

Другие советы

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

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

Выход:

2
2293512

Компилятор также дает предупреждение для этого (FE »Control достигает конца недействительной функции«).

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

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

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

  • возвращение int
  • бросая исключение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top