在c ++中打破功能

时间:2010-12-02 21:09:05

标签: c++ function

你如何在中间留下一个功能?我有离开这个功能的条件,但我不知道如何离开。

例如:

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

我想结束递归,我必须保持函数void

8 个答案:

答案 0 :(得分:10)

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

正如Martin York的评论所指出的那样,我在没有考虑问题的每个方面的情况下都跳了回答,为此我道歉。你想要的可能是:

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

答案 1 :(得分:6)

没有什么可以阻止你在函数中间放置一个return,尽管有些人可能会说这是一种糟糕的风格。

这个想法的主要动机是,如果你的函数中有多个返回点,那么维护清理代码会更加困难,必须在每次返回时传播;但是,使用现代RAII pattern(如果你希望你的代码是异常安全的,那就是必需的)你应该没有多个退出点的问题:清理代码(包含在资源的析构函数中)无论如何都会被召唤。

答案 2 :(得分:3)

您可以使用return。

但你需要一个值:

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

由于函数返回一个值,因此需要给出一个带有值的return语句:

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

对于未返回值的函数,请使用return;

答案 5 :(得分:0)

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

顺便说一句,如果您使用引用(int& num),则不能将num + 1作为参数传递。

答案 6 :(得分:0)

你可以使用这样的东西。请注意,由于它是一个void函数,因此不需要返回值。而且空虚是空的。

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

但我宁愿看到上面的代码示例。

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

答案 7 :(得分:-2)

有些人不喜欢在函数中有多个return语句:

void a(..)
{
  if (...)
    goto end;
  ....
end:
  return;
}
另一方面,我认为他们是愚蠢的。

是的,我已经看过了。