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

Могу ли я вернуться в функцию void?

Мне нужно вернуться к предыдущему уровню рекурсии. это синтаксис, как показано ниже справа?

void f()
{
   // some code here
   //
   return;
}
4b9b3361

Ответ 1

Да, вы можете вернуться из функции void.

Интересно, что вы также можете вернуть void из функции void. Например:

void foo()
{
  return void();
}

Как и ожидалось, это то же самое, что и обычный return;. Это может показаться эзотерическим, но причина заключается в согласованности шаблонов:

template<class T>
T default_value()
{
  return T();
}

Здесь default_value возвращает построенный по умолчанию объект типа T, и из-за возможности возврата void он работает даже тогда, когда T= void.

Ответ 2

Конечно. Вы просто не должны возвращать фактическое значение.

Ответ 3

Да, это вернет из функции предыдущий уровень рекурсии. Это будет очень простое объяснение, но когда вы вызываете функцию, вы создаете новый стек вызовов. В рекурсивной функции вы просто добавляете этот стек вызовов. Возвращаясь из функции, возвращаете ли вы значение или нет, вы перемещаете указатель стека назад к предыдущей функции в стеке. Это похоже на стопку пластин. Вы продолжаете накладывать на него тарелки, но вместо того, чтобы возвращать, движется верхняя пластина.

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

Ответ 4

Да, вы можете использовать этот код для возврата из функции. (Я должен быть очень подробным здесь, чтобы сделать переполнение стека не сказать, что мой ответ слишком короткий)

Ответ 5

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

Ответ 6

Простым ответом на это является ДА! С++ распознает метод void как функцию без возврата. Он в основном сообщает компилятору, что что бы ни случилось, как только вы увидите разрыв return; и оставьте метод....

Ответ 7

Как говорили все, да, вы можете. В этом примере возврат не является необходимым и сомнительно служит цели. Я думаю, что вы имеете в виду раннее возвращение в середине функции. Вы можете это сделать, однако это плохая практика программирования, потому что это приводит к сложному потоку управления (а не к однократному одиночному выходу), а также к заявлениям типа break. Вместо этого просто пропустите оставшуюся часть функции, используя условные выражения, например if/else().