Выход из строя в c ++ - PullRequest
       3

Выход из строя в c ++

0 голосов
/ 03 декабря 2010

как вы оставляете функцию посередине?У меня есть условие для выхода из функции, но я не знаю, как на самом деле выйти.

ex:

void a(int &num){
    if (num > 100){
        // leave function
    }
    num += a(num + 1);
}

Я хочу завершить рекурсию, и я должен сохранить функцию avoid

Ответы [ 8 ]

10 голосов
/ 03 декабря 2010
void a(int &num){
    if (num > 100){
        return;
    }
    num += a(num + 1);
}

Как указывалось в комментариях Мартина Йорка, я ухватился за ответ, не рассматривая каждый аспект вопроса, и за это прошу прощения. То, что вы хотите, вероятно:

int a(int num)
{
    if (num > 100)
         return num;
    return num + a(num + 1);
}
6 голосов
/ 03 декабря 2010

Ничто не мешает вам поставить return в середине функции, хотя некоторые люди могут утверждать, что это плохой стиль.

Основная мотивация этой идеи заключается в том, что если у вас есть несколько точек возврата вваша функция сложнее поддерживать код очистки, который будет распространяться при каждом возврате;однако, используя современный шаблон RAII (который требуется, если вы хотите, чтобы ваш код был безопасным для исключений), у вас не должно возникнуть проблем с наличием нескольких точек выхода: кода очистки (который содержится в деструкторахв любом случае будут называться ресурсы-объекты).

3 голосов
/ 03 декабря 2010

Вы можете использовать return.

Но вам нужно значение:

int a(int num)
{
    if (num > 100)
    {
        return num;
    }
    num += a(num + 1);
    return num;
}
1 голос
/ 03 декабря 2010
void a(int num)
{
    if (num > 100)
    {
    }
    else
    {
        num += a(num + 1);
    }
}
0 голосов
/ 03 декабря 2010

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

void a(int &num){
    if (num > 100){
        return;
    }
    num += a(num + 1);
 }

Но я скорее вижу приведенный выше пример кода следующим образом.

void a(int &num){
    if(!(num >100)){
        num += a(num + 1);
    }
}
0 голосов
/ 03 декабря 2010

Некоторым людям не нравится иметь более одного оператора возврата в функции:

void a(..)
{
  if (...)
    goto end;
  ....
end:
  return;
}

Я, с другой стороны, думаю, что они глупые.

Да, я видел это.

0 голосов
/ 03 декабря 2010
int a(int num){
    if (num > 100){
        return num;  // or return 100;
    }
    num += a(num + 1);
    return num;
}

Кстати, если вы используете ссылки (int & num), вы не можете передать num + 1 в качестве параметра.

0 голосов
/ 03 декабря 2010

Поскольку функция возвращает значение, необходимо указать оператор return со значением:

int a(int num){
    if (num > 100){
        return 100;// leave function
    }
    num += a(num + 1);
    return num;
}

Для функций, не возвращающих значение, используйте return;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...